Objective-C iOSプログラマのための
Swift導入法
長谷川 智希
2014/06/25 Swift LT会
自己紹介
• 長谷川智希 / デジタルサーカス(株) 副団長CTO
• 趣味: iOSアプリ/ Web開発
• その他趣味: カート, 電子工作(mbed) …
@tomzoh facebook.com/
hasegawa.tomoki
デジタルサーカス(株)
• Webサイト開発(PHP, CakePHP, Drupal)
• スマホアプリ開発(iOS, Android)
団員募集中 ­ WE WANT YOU!
今日のテーマ
• Objective-C iOSプログラマのためのSwift導入法
• Objective-Cでのいつもの書き方、Swiftでは?
• TIPS
• Swiftを使ってみての感想
いつもの構文 in Swift
いつもの構文 in Swift
• Controller class definition
• Super class / protocol method
• Protocol method’s parameter
• IBOutlet, IBAction
• AnyObject and Type Casting
Controller class definition
// Super Class	
@interface MasterViewController : UITableViewController {}	
!
// Protocol(s)	
@interface LoveBeerListViewController : UIViewController
<UITableViewDataSource, UITableViewDelegate> {}
// Super Class	
class MasterViewController: UITableViewController {}	
!
// Protocol(s)	
class LoveBeerListViewController: UIViewController,
UITableViewDelegate, UITableViewDataSource {}
Objective-C
Swift
Controller class definition
// Super Class	
class MasterViewController: UITableViewController {}	
!
// Protocol(s)	
class LoveBeerListViewController: UIViewController,
UITableViewDelegate, UITableViewDataSource {}
Swift
•スーパークラス指定は : の後に。
•プロトコル定義はスーパークラス定義の後にカンマ
区切りで。
Super class method
- (void)viewDidLoad {}	
- (void)viewWillAppear:(BOOL)animated {}	
- (void)prepareForSegue:(UIStoryboardSegue *)segue 	
sender:(id)sender{}
override func viewDidLoad() {}	
override func viewWillAppear(animated: Bool){}	
override func prepareForSegue(segue: UIStoryboardSegue, 	
sender: AnyObject?) {}
Objective-C
Swift
• Super classのmethodは override で定義。
Protocol method
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {}
func tableView(tableView: UITableView, 	
cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {}
Objective-C
Swift
• Swiftではパラメタは(変数名: 型)または(外部名 変数名:
型)。
• UIKitのプロトコルメソッドは後者で定義されている。
• Objective-Cへの配慮っぽい。(けどちょっと…)
IBOutlet
!
@property (weak, nonatomic) IBOutlet UITableView *tableView;	
!
@IBOutlet var tableView: UITableView	
Objective-C
Swift
• .hではなく.swiftに書く。
• Interface Builderで[Ctrl]+ドラッグで作る。
IBAction
- (IBAction)pushButton:(UIButton *)sender {	
}
@IBAction func pushButton(sender: UIButton) {	
}
Objective-C
Swift
• IBOutletと同じ。
• senderを選択できるところも同じ。
AnyObject and Type Casting
LBShopTableViewCell* cell = [tableView
dequeueReusableCellWithIdentifier:@"ShopCell" forIndexPath:indexPath];
let cell = tableView.dequeueReusableCellWithIdentifier("ShopCell",
forIndexPath: indexPath) as LBShopTableViewCell
Objective-C
Swift
• Objective-Cでは
dequeueReusableCellWithIdentifier:forIndexPath:の返
値はid型。
• SwiftではAnyObject型。→ as [型]でキャストする。
TIPS
• 現状、Swift、プロトコルメソッドについて補完が効かない。
• 「func tableView(」とか書いて待ってても何も出てこな
い。
• Xcodeのひな形を使ったり、Objective-Cのコードを見な
がらSwiftに翻訳したりすると良いです。
• Kindleの「先取り!Swift(*)」を読んで概要を知ってから
iBooksのドキュメントを読むのがおすすめ。
• ある程度理解したらObjective-CからSwiftに翻訳するのが良
いでしょう。(Swiftはまだ情報が少ないので。)
(*) http://www.amazon.co.jp/dp/B00L35LRPI
Swiftを書いてみた感想
• Swift、いい感じ。
• Objective-C前提で作られた仕様との接点がちょっとイマイチだけど。
• .hって面倒だと思ってたけど思ってたより面倒だったんだな。ETCみた
いな感じ。
• Objective-Cでバリバリ書けるひとが無理して導入することは
ない様に想う。
• 多言語からの参入者にはSwiftの方が心理的障壁が低くていい
かも。
• 製品版になるまでに個人で使い込んで社内で共有しておいて、
製品版になったらすぐ導入しよう。
KeyNote テンプレート:
「大体いい感じになるKeynoteテンプレート「Azusa」作った」http://memo.sanographix.net/post/82160791768
ありがとうございました
@tomzoh facebook.com/hasegawa.tomoki
団員募集中

Objective-Cプログラマのためのswift導入法