SlideShare a Scribd company logo
Swiftだめ自慢
LL Diver 夜の部 2014.8.23(Xcode6 b5)
株式会社キュリオシティソフトウェア
今城 善矩(@yimajo)
会場の皆さんに質問
iOSアプリ開発経験はないが、
Swiftで始めてみようかなという方
挙手をして下さい!
!
!
(・ω・)ノノノノノシ (´∀`)ノノノノノシ
にわか乙
今はまだやめとけ!!
(今はまだObjective-Cから始めたほうが近道だと思う)
XcodeのSwift対応も
まだいまいちで
苦痛を伴うし、
Swiftの言語仕様は大きく変
化している最中、
Swiftの言語設計者自身は
iOSアプリを作った経験がない
のではないかと疑うほど
iOSアプリ開発と相性が悪い点
がある
iOSアプリとの
相性の部分について
Swiftでは
オブジェクトがnilの場合にメソッド
呼び出しは実行時エラーになり
アプリがクラッシュする
Hoge *object = [Hoge piyoA]; //nil返した
!
[object methodA]; //クラッシュせず
[object methodB]; //クラッシュせず
let object: Hoge = Hoge.piyoB() //nil返した
!
object.methodA() //クラッシュする
object.methodB() //クラッシュする
Objective-C
Swift
例
[注釈]piyoBメソッドはnilを返さないと定義されていたのにnilを返された
SIer的な人「クラッシュしないというこ
とはバグが発見されるタイミングが遅く
なって致命的なエラーになりかねないの
に、Objective-C使ってる奴らは何を考え
ているのか…」
すごく気持ちは分かる
が
iOSアプリの性質というものもある
iOSアプリは手触りの良さが全てなのでUIに凝りがち
イベントドリブンなのでアニメーション中の操作など
加味しないといけない
事例1
Objective-Cを使った場合
特にUI関連のコードは条件分岐による
nilチェックを入れるまでもないと判断
される場面が多く
素早くかつ安全なコードを書けた
SIer的な人「SwiftにはOptionalが
言語レベルでサポートされていて、
それのおかげでそもそもnilへのメ
ソッド実行は防げるので相性悪く
はないのではないか」
それも言いたいことはわかる
!
Swiftで完結していて自分だけが書いたコー
ドでアプリが作れるのであればそれは正しい
iOSアプリは広告や効果測定ライブラリ
などサードパーティーのコンパイル済み
ライブラリをてんこ盛りに入れがち
事例2
コンパイル済みライブラリはアプリ開
発者によるソースコード変更はできな
いので、ライブラリ提供者の習熟度を
期待するしかないという
厳しい戦い
事例3
Appleが提供してくれる
Foundation FrameworkのOptional対応も
今のところまだ雑
事例3
公式リファレンスには通信失敗時はNSDataオブジェクトがnilになると書
いてあり、そうであればNSDataはOptionalのNSData?になるはずだが
NSData!になっていてメソッドの宣言部分で意味が捉えられない。
(通信成功でもレスポンスにHTTPBodyがない場合もnilになると思う)
NSURLConnectionで通信結果を非同期に取得するメソッド
AppleはObjective-Cで書かれたAPIの
引数の型に機械的に
!を付けてImplicitly Unwrapped Optionals
にしている気がする。
!
よくわかってないとクラッシュする可能性
は高いので
今はまだSwiftで始めるのは時期尚早
結論
SwiftはOptionalという概念が
言語レベルで存在することで
コンパイラがロジックをチェックしてくれ
る型安全な面を持っていて
言語としてとても良い感じがする
しかし
最近みたネット上の技術記事で、nilになる可
能性があるメンバ変数に対して都度Optional
として扱うのは面倒だからという理由で
Implicitly Unwraped OptionalでOptional型
から変換していたり…
優秀なObjective-Cエンジニア
だってSwiftに慣れていなければ間
違うので結構難しい問題だと思う
まとめ
• Objective-Cではnilへのメソッド呼び出しは無視されるの
であまり頻繁にnilかどうかをチェックしなかった(した
ければすればよかった)
• SwiftのOptionalで型安全になったがiOSアプリ開発者は
元々必要性は感じてなかった(言語仕様としてとても素
晴らしいとは思う)
• Optionalがある言語は珍しく、深く考えずにコーディング
しちゃう人多いと思うのでクラッシュ率上がるかも

More Related Content

Swiftだめ自慢Beta5