トップページ⇒tech
1001コメント296KB

Swiftスレ

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2014/06/03(火) 04:12:21.08ID:rEEU5ykv
WWDC2014で発表されたAppleの新言語Swiftについて語りましょう
https://developer.apple.com/swift/
0315デフォルトの名無しさん2014/06/05(木) 01:35:43.21ID:/T91KtMA
Wikipediaのは、Chris Lattnerが言及してるからみたいだけど、この人は誰だ!

mentioned directly by Chris Lattner, who specifically calls out "Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list"

- See more at: http://glaforge.appspot.com/article/apple-s-swift-programming-language-inspired-by-groovy#sthash.tLMk4cAS.dpuf
0316デフォルトの名無しさん2014/06/05(木) 01:38:17.57ID:/T91KtMA
http://en.wikipedia.org/wiki/Swift_(programming_language)
wikipediaに、Chris Lattnerってちゃんと書いてあった。
0317デフォルトの名無しさん2014/06/05(木) 01:43:24.87ID:mHl+sgam
2010からswift開発始めて、Rustが登場したのは2012年だけど、かなり影響うけてるのか。
0318デフォルトの名無しさん2014/06/05(木) 01:46:18.29ID:2XZ0moAz
>>311
IT系で人気の名前なんだな
0319デフォルトの名無しさん2014/06/05(木) 01:48:51.79ID:/T91KtMA
現在のApple WWDCアプリがSwift製だそうな。
0320デフォルトの名無しさん2014/06/05(木) 04:37:27.76ID:wxkXNxXK
きめぇw
http://image.itmedia.co.jp/ait/articles/1406/03/siwftbeta02.jpg
0321デフォルトの名無しさん2014/06/05(木) 04:40:05.58ID:82BFuaye
もうアップルの頭の中は
中共>日本なんだな
0322デフォルトの名無しさん2014/06/05(木) 04:46:04.60ID:fa/xOZ3s
昔はコンピュータに中国語や韓国語があると
ウィルスに感染したか!?くらいのイメージだったもんだが、
いつの間にかプレゼンスを奪われましたね、日本。
0323デフォルトの名無しさん2014/06/05(木) 04:50:03.37ID:Iunw+H6u
なぁ、なんでconstがletなんだ?
0324デフォルトの名無しさん2014/06/05(木) 04:54:18.65ID:ItySY5z9
これか
無線LANルーター更新でウイルス バッファロー
http://www.chunichi.co.jp/s/article/2014060390170941.html
 パソコン周辺機器大手のバッファロー(名古屋市)がホームページで掲載していたプログラムが改ざんされ、
更新などのためにこれをダウンロードするとウイルスに感染する状態になっていた。
感染したままインターネットバンキングを利用すると、IDやパスワードが漏れる恐れがある。

 同社によると、5月27日午前6時すぎからの約7時間にわたり、
同社の無線LANルーターや外付けハードディスクなどをパソコンで使用するために使う10のプログラムに、
ウイルスが混入していた。発覚後、サービスを停止したが、856件のダウンロードがあったという。

 27日午前10時ごろ、利用者から「プログラムを実行したら、中国語のメッセージが表示された」という連絡があり、発覚した。

(後略)
0325デフォルトの名無しさん2014/06/05(木) 04:57:52.99ID:8eoXOyJj
>>323
rustの影響かな?
0326デフォルトの名無しさん2014/06/05(木) 06:58:50.41ID:mQa+SLGK
C++そのまま呼び出せんのかな?
いつもOS依存箇所だけはObj-Cで書いて、それ以外はC++でコーディングしてた
0327デフォルトの名無しさん2014/06/05(木) 07:18:35.52ID:XqFykZgR
>>326
C++は流石に無理。CかObj-Cでラップしないと
0328デフォルトの名無しさん2014/06/05(木) 07:28:04.45ID:pksLVqXr
letとか分かりにくいな。constとかfinalはfixがいい
0329デフォルトの名無しさん2014/06/05(木) 07:30:14.84ID:OarRmHyJ
let は恥ずかしくて使えないな
0330デフォルトの名無しさん2014/06/05(木) 07:52:58.14ID:XFIZn5Ul
>>326
受口をextern "C"しておけばそのまま呼び出せるでしょ。
今までもObjective-C++として使ってなかったのなら、そうしてたはず。
0331デフォルトの名無しさん2014/06/05(木) 08:01:26.50ID:OarRmHyJ
中江有里
0332デフォルトの名無しさん2014/06/05(木) 08:51:39.10ID:BcBKMn/M
let s = 'go'
0333デフォルトの名無しさん2014/06/05(木) 08:55:02.24ID:v0mN5gE+
let it = 'go'
0334デフォルトの名無しさん2014/06/05(木) 08:59:59.18ID:23MIBYyX
>>278 まさにコンピュータ教育を意識して作ったらしい。

Apple's top secret Swift language grew from work to sustain Objective C, which it now aims to replace

http://appleinsider.com/articles/14/06/04/apples-top-secret-swift-language-grew-from-work-to-sustain-objective-c-which-it-now-aims-to-replace

Swift の考案者は、LLVM創設者の Chris Lattner だそうだ。

documentation guru と同様に compiler optimization ninja と言う言葉が使われてるのは面白い。 それと dogfooding group
(テストグループ)とか、いつも内部で使ってるんだろうな。

すごく面白いから一読を勧める。
特に
Swift's Interactive Playgrounds & REPL

"I hope that by making programming more approachable and fun,
we'll appeal to the next generation of programmers and to help redefine how Computer Science is taught," Lattner stated.

Apple notes that the REPL debugging console in Xcode "includes an interactive version of the Swift language built right in.
Use Swift syntax to evaluate and interact with your running app, or write new code to see how it works in a script-like environment."
0335デフォルトの名無しさん2014/06/05(木) 09:20:29.95ID:XW7Omk0c
>280
ドキュメントのソース部分以外ほとんど見てないから想像だが
export で指定したものが他のモジュールから見えるのだと思われる
デフォルトが private で export で指定したものだけ public ?
C言語や関数型の言語と同じような指定の仕方か

環境使える人詳しく教えて
0336デフォルトの名無しさん2014/06/05(木) 09:28:26.87ID:23MIBYyX
>>282 出来るだろ。  >>293 0 じゃなくて NULL と同じ
>>323 >なぁ、なんでconstがletなんだ?
let j = i
と言う使い方も有り、必ずしも定数とは限らないから。 これ以降変化しないよと言う定義。
0337デフォルトの名無しさん2014/06/05(木) 11:02:18.15ID:oKmamV8t
let j = i って英語だとどういうニュアンスなんじゃろ
0338デフォルトの名無しさん2014/06/05(木) 11:24:31.82ID:fhxWm8Xr
単純にiをjにするってニュアンスじゃないの?

直接的には、iがimmutableってニュアンスは無いと思うけど、
いまはimmutableな変数をなるべく使うべしって流れがあるからletにその役目を与えて、
mutableには別のvarって構文を用意したと

Rustはimmutableもmutableもletで宣言するけどデフォルトはimmutableで、
mutableな変数を定義するときにはlet mutとかするねえ
0339デフォルトの名無しさん2014/06/05(木) 12:46:01.63ID:VmoRAZhY
letは値や式に一時的に名前を付けるイメージじゃないかな。数学で言うところの〜と置く、みたいな。letって言葉を使ってるのはHaskellとかの関数型言語に合わせたんじゃないだろうか。
varはvariable=変数=変化するもので、容れ物や箱やメモリそのものみたいなイメージ。
mutableかimmutableかの違いだけにみえて、内部実装的にもかなり取り扱いが違うんじゃないかと予想。
0340デフォルトの名無しさん2014/06/05(木) 13:01:00.00ID:/748C5a2
letはBASICの代入文を思い出す
0341デフォルトの名無しさん2014/06/05(木) 13:01:33.97ID:/lL990/k
日本のプログラミング教育はSwiftでいいんじゃね
世界でiPhoneシェア一番高い国だし
0342デフォルトの名無しさん2014/06/05(木) 13:04:11.37ID:ICYd1xse
http://togetter.com/li/675599

>Swiftの関数はHaskell風。これはいい。マシン語が透けて見える。CPUの歓声が聞こえてきそうだ
0343デフォルトの名無しさん2014/06/05(木) 13:07:28.65ID:23MIBYyX
Appleの新プログラミング言語、Swiftを使って半日くらいでFlappy Birdのクローンが書けた
http://jp.techcrunch.com/2014/06/05/20140604a-developer-cloned-flappy-bird-using-apples-new-programming-language-swift-in-a-matter-of-hours/
以前の開発言語、Objective-Cに比べて、Swiftに新たに備えられた高度な機能がデベロッパーの生産性を大きく向上させるだろうという予測が実証されたかたちだ。

Murrayは実際に使ってみて「新しくiOSアプリの開発に取り組むプログラマーに対してハードルを下げる「というAppleの目標は達成されたと考えている。
Murrayによれば、Swiftの大きなメリットの一つはPlaygroundsと呼ばれる機能だという。
ここではコードを編集しながら、それが実際にどう動作するかをリアルタイムで見ることができる。

「4時間よりはかかったが9時間まではかかっていない。ログによると空のフォルダーからデモが作動するようになるまで9時間近くかかっているが、その間に食事もしたし、子供を寝かしつけたりしていたのでね」と語った。

ソースコード
https://github.com/fullstackio/FlappySwift
0344デフォルトの名無しさん2014/06/05(木) 13:11:20.47ID:fhxWm8Xr
>>343
まだシンタックスハイライト対応してないのかwがんばれGithubちゃんw
0345デフォルトの名無しさん2014/06/05(木) 13:41:38.15ID:5c6Sl3cl
多分constじゃないのはletが代入の可否を返す式だからだと思うよ
if let it = go {it.foo()}(実質「goがnilじゃない場合foo()を実行」と同義)
みたいな使い方するみたいだし

>>267
言語的に特別扱いしないでC言語周りが使えるのは何気に凄いな
0346デフォルトの名無しさん2014/06/05(木) 14:00:04.98ID:epSx9FaU
ifの比較と代入間違える凡ミスをなくすための
let強制だとしたらいくらなんでもやり過ぎだな
0347デフォルトの名無しさん2014/06/05(木) 14:01:03.50ID:fhxWm8Xr
>>345
letが値を返す式というわけじゃ無いと思うが自分は確かめるすべが無い
Language Reference見る限りifの次に式か宣言の両方が書けるということになってる

let 〜は宣言で、宣言は式じゃないから
let a = let b = 0
みたいには書けないんじゃないかな?
0348デフォルトの名無しさん2014/06/05(木) 15:40:25.97ID:MTRKCqc9
オブジェクト指向は愚かな考え。
http://peace.2ch.net/test/read.cgi/tech/1393660194/
0349デフォルトの名無しさん2014/06/05(木) 15:41:28.90ID:N9ZszDAJ
要するにいろいろパクってみたが、
何のための言語がよく分らないものができたってかんじか。

>非常に軽快に動くことが特徴であり、

特徴でもなんでもないし。
0350デフォルトの名無しさん2014/06/05(木) 15:48:43.38ID:23MIBYyX
>>349 どこが?
0351デフォルトの名無しさん2014/06/05(木) 15:53:18.65ID:bTGozmC4
4月にDevProgram切れたの放置してたけどSwiftだけやってみてえ……7800円払うのは負けだよなぁ……
0352デフォルトの名無しさん2014/06/05(木) 15:59:18.60ID:N9ZszDAJ
>>350
おまのレスを読んでもガッカリ感しか感じない。
JavaやC#を超える衝撃的な「何か」はないのか?
0353デフォルトの名無しさん2014/06/05(木) 16:04:29.96ID:/lL990/k
つ 驚き最小の原則
0354デフォルトの名無しさん2014/06/05(木) 16:14:34.40ID:VmoRAZhY
パラダイムを変革するとか新しい考え方を導入するとか考えてないと思う。
OSXやiOSで開発する上で必要なものや便利なものをまとめ上げた言語だと思う。
考え方としてはDSLにちかいんじゃないかな。
0355デフォルトの名無しさん2014/06/05(木) 16:17:17.84ID:XqFykZgR
Cの関数を簡単に呼べるのが凄いわ
0356デフォルトの名無しさん2014/06/05(木) 16:19:40.60ID:7wqllzhY
つまり30~40年後に Swift 老害としてCOBOLerのような地歩を固めるのだ
0357デフォルトの名無しさん2014/06/05(木) 16:19:51.45ID:N9ZszDAJ
むしろ呼び出したくないだろ。
コードにCのprintfが混ざってるなんて勘弁してくれ。
0358デフォルトの名無しさん2014/06/05(木) 16:22:50.06ID:EQvmYwTS
Cのライブラリを利用できるんだぜ
0359デフォルトの名無しさん2014/06/05(木) 16:25:17.28ID:X78aNysa
なんかprintfとかfprintfはどうやっても呼べないんだよね
あれって実体がマクロだったりしたっけ
0360デフォルトの名無しさん2014/06/05(木) 16:30:26.15ID:sui12ysr
利点はわりとフツーの字面で
iナンタラの開発ができるということに尽きるのではなかろうか
objective-cなんか使わされるよりははるかにましな気が
0361デフォルトの名無しさん2014/06/05(木) 16:32:44.37ID:EQvmYwTS
>>359
可変長引数だめなんか
0362デフォルトの名無しさん2014/06/05(木) 16:39:16.44ID:N9ZszDAJ
ObjectiveCなんか使わずに初めからC++採用してればよかったんだよ。
0363デフォルトの名無しさん2014/06/05(木) 16:48:43.10ID:X78aNysa
>>361
NSLogは使えるんだよねえ
0364デフォルトの名無しさん2014/06/05(木) 17:00:29.40ID:ssQRlflZ
xcode6だけ早いとこ正規リリースしてAppStoreにあげてくれないかな
iOS8向けの開発をSwiftでやりたいがベータ版の開発環境は使いたくない
0365デフォルトの名無しさん2014/06/05(木) 17:03:54.12ID:sui12ysr
セミコロン省略可はいいね
この銀河系に存在する全言語で採用して欲しい
0366デフォルトの名無しさん2014/06/05(木) 17:15:14.85ID:2XZ0moAz
隣の銀河系のことも考えてやれ
0367デフォルトの名無しさん2014/06/05(木) 17:20:36.18ID:bTGozmC4
>>365
そうなると逆に複数行にわたって1つのstatementを書きたい時はどうなるんだ?
シェルみたいにバックスラッシュで連結かなあ?
semicolon省略に関する記述と、1行に複数statementの時はsemicolon要るって記述は見つけたんだが……
0368デフォルトの名無しさん2014/06/05(木) 17:23:07.17ID:7wqllzhY
省略可じゃなくて禁止にすべき
>>343 とかまだらに残ってて笑った
0369デフォルトの名無しさん2014/06/05(木) 17:24:53.47ID:U2o1cB0T
>>367
試したところスペースが入りうるところでは任意に改行できるみたい
改行前のバックスラッシュはエラー
0370デフォルトの名無しさん2014/06/05(木) 17:26:49.78ID:bTGozmC4
>>369
それ、構文的にstatementの終わりかどうかを判別できてるってことだよね?
だったら、1行に複数statement入れた時も、判別できるからsemicolon不要だと思うんだが……
0371デフォルトの名無しさん2014/06/05(木) 17:28:38.98ID:D0EgXF03
どんだけ読みにくいソース書きたいんだよ!
0372デフォルトの名無しさん2014/06/05(木) 17:29:14.79ID:U2o1cB0T
>>367
consecutive statements on a line must be separated by ';'
というエラーが出るから、構文の区切りは判断してるけど可読性のためにセミコロンを明示的に入れよ
というルールにしていると思われる
0373デフォルトの名無しさん2014/06/05(木) 17:36:11.09ID:3dO8/iia
Swiftってメソッド名を取得するようなプリティーなファンクションある?
0374デフォルトの名無しさん2014/06/05(木) 17:36:25.69ID:bTGozmC4
>>372
それなら、複数行のstatementがどこで終わるかわかりにくいから
可読性のためにsemicolonを入れて欲しいよ……
何か気持ち悪いなぁ
0375デフォルトの名無しさん2014/06/05(木) 17:46:41.07ID:XqFykZgR
>>374
セミコロン入れたいのなら自分で書けば良いだけだろ
変なこと行ってるぞお前
0376デフォルトの名無しさん2014/06/05(木) 18:00:43.18ID:hxrPvcfi
>>362
OS X が BeOS だったらそうなっただろうね。NeXT になったから ObjC。
NeXT は Apple から追い出されたジョブスが Machintosh の有力開発環境だった Smalltalk に親しんでいたから inline Smalltalk を書ける ObjC。
そういう歴史。

>>372
これも Smalltalk からの歴史。Smalltalk ではコロンでは無くて . だけど。
ちなみにどっかの論文で、BASIC や Smalltalk のようなセパレータタイプよりも、C のターミネータタイプの方が学習が容易で間違いが少ないという実験があった。
0377デフォルトの名無しさん2014/06/05(木) 18:01:35.29ID:Ss1X6IjI
例えばこんなワンライナーで

var a = rand() var b, c: Int? b = a % 20 > 10 ? 10 : 20 c = a > 10 ? b : b! + 20

ぱっと見で瞬時にセンテンスの区切りが分かるならセミコロンはいらんだろうな
0378デフォルトの名無しさん2014/06/05(木) 18:08:39.95ID:bTGozmC4
>>375
いやいや、必須になってるのと任意になっているのでは「他人のコードを読む」ときの
可読性が違うから気にしてんだよ。自分のコードなら入れるって。

1行に複数statementの時は「必須」だから文の切れ目がわかるけど
複数行に1statementの時は「任意」っぽい(?)からわかりにくく「書ける」ってこと。
0379デフォルトの名無しさん2014/06/05(木) 18:15:14.57ID:Ss1X6IjI
複数行に1statementの時に終わりが分かりにくいってことはないと思うぞ
そんなに分かりにくかったら空行なりいれればいいわけだし
0380デフォルトの名無しさん2014/06/05(木) 18:22:25.93ID:bTGozmC4
>>379
だから、自分で書くんだったら注意するって。
実際に見てみたらわかりにくくないってことないのかなぁ?
まぁ、当面はXcodeしかコーディング環境がないからXcodeが上手いこと見せてくれれば問題ないか
0381デフォルトの名無しさん2014/06/05(木) 18:36:08.42ID:fhxWm8Xr
>>380
複数ステートメント1行セミコロン無しでわかり難い例は>>377にレスしてくれてるんだから、
1ステートメント複数行でわかり難い例ってのを具体的に書いてみたら?
0382デフォルトの名無しさん2014/06/05(木) 18:44:38.48ID:U2o1cB0T
Swiftはlongがない代わりにintの長さがマシン依存だからいやんなことになりそう
0383デフォルトの名無しさん2014/06/05(木) 18:52:06.49ID:fhxWm8Xr
長さに依存するような整数はInt64とかInt32みたいに書けばいいんじゃないか?
0384デフォルトの名無しさん2014/06/05(木) 18:55:52.22ID:k17DeP1N
そういやMacはもう64bit環境しかないな。
iOSの方は5sのみ64bitで後は移行中だけど
0385デフォルトの名無しさん2014/06/05(木) 18:56:05.34ID:U2o1cB0T
OSXのC処理系はILP32 or LP64だから、何となく
0386デフォルトの名無しさん2014/06/05(木) 18:58:38.99ID:XqFykZgR
C書いてるときには、関数内で特定の処理の塊を { } で囲んでコメント付けたりしてたんだが、
こういうことを Swift では出来なくなったみたいだな。
{} がクロージャとして認識されるから。
0387デフォルトの名無しさん2014/06/05(木) 19:09:55.48ID:OzgJ1p8p
文末記号が無い言語は解析ルール次第で出来ることが変わるから信用できない
VB9なんかは多項式の途中で改行するとエラーになったりして救えなかった
0388デフォルトの名無しさん2014/06/05(木) 19:24:02.90ID:fhxWm8Xr
>>386
そういうのは関数内で関数定義して呼び出しちゃえばいいんじゃない?
コンパイルされるコードは最適化されちゃって変わんないと思うよ
0389デフォルトの名無しさん2014/06/05(木) 19:24:35.64ID:fhxWm8Xr
>>387
解析ルールは明示されてるよ
0390デフォルトの名無しさん2014/06/05(木) 19:25:14.43ID:bTGozmC4
>>381
こ、こんなのであってますか……言語仕様もいまいち分かってなくて
コンパイル通るかもわかんないけど……

var hogehoge = "hogehoge"
var a : Boolean = let b :
Integer = 0b11110000 && let
hogehog = "gehogeho"
0391デフォルトの名無しさん2014/06/05(木) 19:26:21.05ID:bTGozmC4
そもそも、IntegerもBooleanも違うかったわ
0392デフォルトの名無しさん2014/06/05(木) 19:34:00.01ID:XqFykZgR
お前、言語仕様も分かってないのにグダグダ言ってたのか
0393デフォルトの名無しさん2014/06/05(木) 19:39:35.40ID:/lL990/k
>>390
2行目の b と : の間で文法エラー
0394デフォルトの名無しさん2014/06/05(木) 19:40:36.38ID:fhxWm8Xr
>>390
なんかめちゃくちゃだと思うが、
式の途中で改行とかすれば次の行の先頭にインデントとか入るだろうから
行の初めが前の行から継続してるかどうかは自明になると思う
0395デフォルトの名無しさん2014/06/05(木) 19:49:48.50ID:18Wy6DPo
どーせ瑣末な文法で躓くんだから、c++使い続けたらいいのに
0396デフォルトの名無しさん2014/06/05(木) 19:51:30.46ID:bTGozmC4
>>392
( ̄Д ̄)ノ オウッ すまんの試す環境がないから
さっき聞いたスペースが入るトコはどこでも改行できるって話を元に考えただけだし
IDEでのフォーマットはない前提な
型の名前が間違ってるのは愛嬌で許してくれよ

>>393
型との間の:は空白を許さないの?それとも型とコロンの間の空白はきっちゃダメ?
後、letで代入する値が変数じゃなくてリテラルの場合は常にtrueだから
もしかしたら怒られる?それとも単に最適化でtrueに変換されるだけかな?

試したい……
0397デフォルトの名無しさん2014/06/05(木) 19:55:14.22ID:fhxWm8Xr
>>396
IDEのフォーマットが無い前提って、インデント無しのコードを読めってこと?
そんなの問題外じゃない?

あと、letがBooleanを返す?って他でも書いてる人がいるから調べてるんだけど、
どこかのドキュメントに書いてある?
0398デフォルトの名無しさん2014/06/05(木) 19:58:17.00ID:/lL990/k
if let a = b {
}

って書き方できるから勘違いしてるんだろう
letがBool返すわけではない
0399デフォルトの名無しさん2014/06/05(木) 20:11:52.36ID:bTGozmC4
とりあえず実物触るまでは全て杞憂らしいことが何となく納得。
if let a = b は The Swift programming languageの頭の方のControl Flowの節で出てて
↓
“If the optional value is nil, the conditional is false and the code in braces is skipped.”

抜粋:: Apple Inc. “The Swift Programming Language”。 iBooks. https://itun.es/jp/jEUH0.l

ってなってるから、condition is "false" って値が取れると思ってた。ってか、取れないんだ?
複数の値のnil値判断を&&で出来ると思ってた。
0400デフォルトの名無しさん2014/06/05(木) 20:25:51.95ID:Ss1X6IjI
var i: Int? = 10
if i {
 println("i = \(i)")
}

はオッケー

var i: Int = 10
if i {
 println("i = \(i)")
}

はアウト〜
0401デフォルトの名無しさん2014/06/05(木) 20:35:36.13ID:bTGozmC4
>>400
つまり?のついている値が"optional"ってマークされてるものの値を評価してるわけだ。
letの返値じゃなくて、代入された値を評価してる、と。
"optional"な値の場合は、nilはfalse、nil以外がtrueとして評価される、と?
"optional"じゃない場合は、条件式で利用できない……か。
0402デフォルトの名無しさん2014/06/05(木) 20:48:52.91ID:q+iSb4xf
Swiftってアップル製品の環境でしか動かないの?
0403デフォルトの名無しさん2014/06/05(木) 20:50:04.79ID:N9ZszDAJ
MSがWindowsで動くようにしたらAppleはいつものようにすぐ訴えるし。
0404デフォルトの名無しさん2014/06/05(木) 20:53:59.72ID:DVEEJUDF
記念カキコ
0405デフォルトの名無しさん2014/06/05(木) 20:57:26.27ID:D2wOjwoR
クラス内の変数は全部パブリックになってしまうん?
0406デフォルトの名無しさん2014/06/05(木) 21:07:17.88ID:23MIBYyX
>>397  let a=b のb が値を持つかどうかの判定でBooleanを返すと有るね。

The Basics の Optional Binding
You use optional binding to find out whether an optional contains a value
if let constantName = someOptional {

元々 if a=b をエラーにするから、代入兼判定としてletを使うようにしたと言う事だろうけど。
0407デフォルトの名無しさん2014/06/05(木) 21:20:07.46ID:Ss1X6IjI
憶測が多いな
別にletじゃなくてvarでもいいんだけど

var a: Int? = 10
if var b = a {
println("b = \(b)")
}
0408デフォルトの名無しさん2014/06/05(木) 21:51:22.48ID:qTkh2drY
swiftのarrayってlet&unshareで使うのがいいのかな??
appendした後の挙動がバグ臭プンプンする。
0409デフォルトの名無しさん2014/06/05(木) 22:04:27.80ID:bTGozmC4
>>407
大事なのは Int? の ? だと思うんだが。?のついている型だけが代入時のnil判定に使えるということじゃないの?
>>408
後ろはNSMutableArrayじゃなさそう?
0410デフォルトの名無しさん2014/06/05(木) 22:08:28.49ID:ZaCMtfJy
C++のboost::optionalよりよさげ?
0411デフォルトの名無しさん2014/06/05(木) 22:23:42.09ID:qTkh2drY
>409
“Assignment and Copy Behavior for Arrays”を読んで欲しいんだけど、
var listA = [1,2,3]
var listB = listA
listB[0] = 9
ってするとlistA[0]も9になってる。
まぁこれは普通だよね。

だけどこのあと
listA.append(4)
って要素数が変わる操作をしたら
listA[1] = 22
ってしても listB[1] は2のまま。
分かっててもミスりそう。
0412デフォルトの名無しさん2014/06/05(木) 22:32:28.70ID:bTGozmC4
>>411
これはトラップ過ぎるwwww
funcに引数で渡されてきたArrayはどういう扱いなんだろう?
要素追加した瞬間にcopyされて別物か?
0413デフォルトの名無しさん2014/06/05(木) 22:33:26.53ID:Ss1X6IjI
>>411 ディクショナリだとまた挙動が違うんだよな

var dictA = [0:1, 1:2, 2:3]
var dictB = dictA
dictA[0] = 9

ってやると、dictA[0]は9になるけど、dictB[0]は1のまま
0414デフォルトの名無しさん2014/06/05(木) 22:39:53.87ID:O/ymbC/3
Optionalの説明はココが分かり易かった
http://blog.livedoor.jp/rapple_lab/archives/7720544.html
0415デフォルトの名無しさん2014/06/05(木) 22:42:40.01ID:qTkh2drY
>>413
arrayもdictionaryもstructureなんだからdictionaryの動作が正しいよね。きっと。
arrayのはパフォーマンス上げるためなんだろけどunshareを標準にして欲しい。

>>412
>要素追加した瞬間にcopyされて別物か?
明日試してみるよ
■ このスレッドは過去ログ倉庫に格納されています