質問: swiftはまだ使っていないのですが、swiftの使い心地とか、 良い点、悪い点を教えてください。
回答: 仕様の変更が著しいのでこの先どうなるか不明ですが、現状まで(beta4)における個人的な感想です。 好意が持てる点 * mutable と immutable なオブジェクトを var と let で書き分けられる(主にswfitの配列と辞書). * 型推定のおかげでタイプする量が減りそう(enumとか変数宣言時とか) * extension により既存機能の拡張がしやすい. * オプショナルチェイニング(foo?.bar() みたいなの)は便利 * プロパティ変更の監視が簡単になった(willSetとdidSet) * NSObjectを継承せずにクラスが作れる(今のところ、特に良いことはないけど) * objective-cのようにクラスにプレフィクスを付けずに済む(モジュール単位で名前空間が独立) * cocoaとの連携が考慮されているので、delegateパターンなど既存の作法はそのまま使える. ちょっと気になる点 * 良くも悪くも型にうるさくなった(objective-cが緩すぎただけという説もある) * マルチスレッド環境を考慮した機能がない(プロパティの atomic や、@synchronizedなど)ため、自分で制御する必要がある * オプショナルチェイニングは便利だが参照と呼び出ししかできず、値の代入には使えない(foo?.baz = 10 は駄目. foo!.baz = 10 は可. ただしfooがnilだとランタイムエラーになるので下記のバインディングを使ったりする) * オプショナルバインディング( if let foo = bar?.baz {} みたいなの)のせいでif文が多くなる気がする * NSObjectから performSelector~系の機能がなくなった(ディレイ実行 -> キャンセルのようなことが手軽にできない) * 仕様変わり過ぎ(......まだbetaなので) (オプショナルなどの意味は言語リファレンスを参照してください) **[UPDATE]** * beta5から、オプショナルチェイニング経由で値の設定が可能になった(foo?.baz = 10はOK). さらに成功したかどうかを判定できる. ``` if (foo?.baz = 10) != nil { // set successfully } else { // failed } ``` よって、下記は解消 > - オプショナルチェイニングは便利だが参照と呼び出ししかできず、値の代入には使えない(foo?.baz = 10 は駄目. foo!.baz = 10 は可. ただしfooがnilだとランタイムエラーになるので下記のバインディングを使ったりする) 相変わらず、仕様の変更は続く......