swift
TRANSCRIPT
JamNaviというアプリをリリースしました
開発期間6ヶ月 工数で言ったら 2.0ヶ月くらい バックエンドはParse SwiftよりはUIKitやプロジェクトの環境設定で苦戦 なぜみんないまだにObjective-Cで書いているのか理解できない
Swift イイところ
ランタイムエラーからの解放(型安全) [[[[^void{}]]]];にさよならできる!開発効率向上 ハイレベルな言語機能 学習コスト低い(シンプルで直感的な言語機能) 実行速度速いらしい
Objective-C脳
Person.h @interface Person @property (nonatomic) NSString *name; -(void)walk:(NSInteger)distance; @end
Person.m #import “Person.h”; @implementation Person -(void)walk:(NSInteger)distance {} @end
Objective-C脳
@property (nonatomic) NSArray *items;
for (NSDictionary *dic in items) { NSString *video_id = [dic objectForKey:@“video_id”]; NSLog(“%@“, video_id); … .. }
Swift脳
var items:[Dictionary<String, String>] // 型安全
for item in items { if let v = item["video_id"] { // リテラルもシンプル println(v) // 直感的 } }
struct optional type cast extension generics protocol access control closure initializer enum subscript typealias property observer custom operator
struct
$ grep ^struct\ swift-header | wc -l 81 $ grep ^class\ swift-header | wc -l 3 classよりなるべくstructを使いましょう
使ってわかったハマりどころ
コンパイルおっそい=>1.2でだいぶ改善した Xcodeクラッシュする=>もう慣れたので何とも思わない initializerの定義でハマる genericsで頑張るとハマる(今はまだ使わないほうが幸せかも) カスタム演算子定義が競合する可能性 環境設定のやり方に悩む
#if はできるけど#ifdef #def できません PREPROCESSOR MACROも当然使えません *.xcconfigを使えば解決しそう
まとめ
つらみを補って余りある利点 シンプルで使い易い。開発効率もさることながら、後からメンテするのがラクなのが実は一番嬉しい。 若い技術なのでコミュニティの躍動感を味わえる。
Objective-CとSwiftは同じプロジェクト内で共存できる dプロジェクトも理論的には全部Swiftに置き換え可能 段階的に置き換えていくと幸せかも
Learning Swift
Swift Programming Language (Apple) Functional Programming in Swift (objc.io) swift-json (dan kogai) WWDC videos
Swift interoperability in depth Intermediate Swift Advanced Swift
realm.io