狠狠撸

狠狠撸Share a Scribd company logo
Swift 2014夏
デジタルサーカス(株)??長?谷川智希
?自?己紹介
? ??長?谷川智希
? デジタルサーカス(株) 副団??長CTO
? 趣味: iOSアプリ開発, Web開発
? その他趣味: レンタルカート, 電?子?工作(mbed), …
と も き
@tomzoh TOMZOH
著書
iOS
執筆中
デジタルサーカス(株)
? Webサイト受託開発(PHP, CakePHP, Drupal)
? スマホアプリ受託開発(iOS, Android)
? ?自社サービス (http://appbuilder.jp)
2000 Samui 2001 Cebu 2002 Phuket 2004 Ishigaki 2005 Vietnam 2006 Hǎinán Dǎo
2007 Bali 2008 Taiwan 2010 Seoul 2011 Macau 2012 Guam 2013 Phuket
Swift事情2014夏 ~ Swift入門 beta6対応
もくじ
1. Xcode上でのSwiftの取り扱い
2. Objective-CからSwiftになって変わること変わらないこと
3. Objective-Cでのいつもの書き?方、Swiftでは?
4. Swift TIPS
5. 現時点での資料料ポインタ
Playground
? 本?日の発表に含まれるコード実?行行例例はXcode6の
Playgroundを使ったものが多いです。
デモ
1. Xcode上でのSwiftの取り扱い
1. Xcode上でのSwiftの取り扱い
2. Objective-CからSwiftになって変わること変わらないこと
3. Objective-Cでのいつもの書き?方、Swiftでは?
4. Swift TIPS
5. 現時点での資料料ポインタ
プロジェクトの作り?方
? 今までと同じ。Product Name, Organization Name,
Organization Identifier, Devies …
? Languageの選択が増えている。Swiftを選択。
プロジェクト内のファイル
? おなじみMaster-Detail Applicationの場合…
? AppDelegate.swift
? Main.storyboard
? MasterViewController.swift
? DetailViewController.swift
? あんまり変わらない。
新規ファイルの追加
? プロジェクト作成同様 Language の設定が増えている以外
は同じ。
? クラスを指定するとそのクラスのひな形が作成される。
Xcode上でのSwiftの取り扱いまとめ
? ?言語の選択がある他はObjecive-Cの時と同じ。
? 継承クラス指定、便便利利です。活?用しましょう。
2. Objective-CからSwiftになって
変わること変わらないこと
1. Xcode上でのSwiftの取り扱い
2. Objective-CからSwiftになって変わること変わらないこと
3. Objective-Cでのいつもの書き?方、Swiftでは?
4. Swift TIPS
5. 現時点でのおすすめ資料料
変わること
? No .h, .m . Only .swift
? ファイルを?行行き来しなくて良良いので地味にラク
? Interface Builderから作成するIBOutlet, IBActionも .swift に書く
? ?言語仕様による変化
? 構造体のメンバへ直接アクセス可能
? 変数 … Immutable / Mutable / 型推測
? クラス定義 / メソッド定義
? nilを意識識したコーディング
? Dictionary, Arrayの取り扱い
?言語仕様による変化
Immutable / Mutableな変数
構造体のメンバへ直接アクセス可能
型推測
?言語仕様による変化
クラス定義 / メソッド定義
変わらないこと
? Xcode Project, StoryBoard, Interface Builder
? Provisioning Profiles
? COCOAPODS含めObjective-Cベースのライブラリ混在可
? Cocoa Touch (Foundation Framework, UIKit, … )
3. Objective-Cでのいつもの書き
?方、Swiftでは?
1. Xcode上でのSwiftの取り扱い
2. Objective-CからSwiftになって変わること変わらないこと
3. Objective-Cでのいつもの書き?方、Swiftでは?
4. Swift TIPS
5. 現時点での資料料ポインタ
Controller class definition
// Super Class	
@interface MasterViewController : UITableViewController {}	
// Protocol(s)	
@interface LoveBeerListViewController : UIViewController <UITableViewDataSource,
UITableViewDelegate> {}
Objective-C
// Super Class	
class MasterViewController: UITableViewController {}	
// Protocol(s)	
class LoveBeerListViewController: UIViewController, UITableViewDelegate,
UITableViewDataSource {}
Swift
? スーパークラス指定は : の後に。
? プロトコル定義はスーパークラス定義の後に , 区切切りで。
Super class’s method
? Super classのmethodは override で定義。
- (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
Protocol method
? Swiftではパラメタは(変数名: 型)または(外部名 変数名: 型)。
? UIKitのプロトコルメソッドは後者で定義されている。
? Objective-Cへの配慮っぽい。(けどちょっと…)
- (UITableViewCell *)tableView:(UITableView *)tableView?
cellForRowAtIndexPath:(NSIndexPath *)indexPath {}
func tableView(tableView: UITableView, ?
cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {}
Objective-C
Swift
IBOutlet
? .hではなく.swiftに書く。
? Interface Builderで[Ctrl]+ドラッグで作る。
!
@property (weak, nonatomic) IBOutlet UITableView *tableView;	
!
@IBOutlet var tableView: UITableView	
Objective-C
Swift
IBAction
? IBOutletと同じ。
? Objective-C同様senderを選択できる。UIButton or AnyObject
- (IBAction)pushButton:(UIButton *)sender {	
}
@IBAction func pushButton(sender: UIButton) {	
}
Objective-C
Swift
AnyObject and Type Casting
LBShopTableViewCell* cell = [tableView
dequeueReusableCellWithIdentifier:@"ShopCell" forIndexPath:indexPath];
let cell: LBShopTableViewCell =
tableView.dequeueReusableCellWithIdentifier("ShopCell", forIndexPath: indexPath)
as LBShopTableViewCell
Objective-C
Swift
? dequeueReusableCellWithIdentifier:forIndexPath:の返値は
Objective-Cではid型。SwiftではAnyObject型。
? Swiftではas [型]で明?示的にキャストする必要あり。
4. Swift TIPS
1. Xcode上でのSwiftの取り扱い
2. Objective-CからSwiftになって変わること変わらないこと
3. Objective-Cでのいつもの書き?方、Swiftでは?
4. Swift TIPS
5. 現時点でのおすすめ資料料
Swiftでの開発TIPS
? ?言語仕様
? 翱辫迟颈辞苍补濒型
? ARC
? Arrayの実装 / タプル
? COCOAPODSの使い?方
? ライブラリ绍介
? SwiftyJSON
? ALAMOFIRE
?言語仕様
1. ?言語仕様
2. COCOAPODSの使い?方
3. ライブラリ绍介
翱辫迟颈辞苍补濒型
翱辫迟颈辞苍补濒型
? Objective-C の NSString には nil が?入る。
? Swift の String には nil は?入らない。
? nil を?入れたい場合は Optional<String> 型を使う。
? String 型として使いたい場合 Optional<String> 型のままでは使えな
いので String 型を取り出して使う。
? これを「アンラップ」と?言う。?
(String 型が Optional<String> 型に「ラップされている」)
? アンラップにはいくつかの?方法がある。
翱辫迟颈辞苍补濒型
nilを?入れるなら翱辫迟颈辞苍补濒型に。
Optional<String>型はそのままでは使えない
翱辫迟颈辞苍补濒型 - アンラップ
アンラップして String 型として使える様にする
アンラップは複数の?方法がある
?はOptional Chaining、!はForced Unwrapping
翱辫迟颈辞苍补濒型 - アンラップ
if や while の中でアンラップする?方法は Optional Binding
? let でも var でもOK
? unwrappedStr は String 型
? optionalStr が nil の場合は if の条件式の評価が false になる
翱辫迟颈辞苍补濒型 - アンラップ
Implicitly Unwrapped Optional 型で宣?言する
使?用時に強制的にアンラップされる
Implicitly Unwrapped Optional 型に nil が?入っているとランタイムエラー
翱辫迟颈辞苍补濒型 - シンタックスシュガー
? シンタックスシュガー
? Optional<String> → String?
? Implicitly Unwrapped Optional<String> → String!
? アンラップに使う ? や ! とは別物
ARC
ARC
? Swiftのメモリ管理理はARC。
? 循環参照が発?生しない様に気を遣う必要がある。
? 従来の strong, weak と新規に追加された unowned
ARC
// self がクロージャを強参照し、クロージャが self を強参照して循環参照に陥る	
self.aProperty = {	
self.doSomething()	
}	
!
// unowned self としてキャプチャすると、クロージャは self を所有しない	
self.aProperty = {	
[unowned self] in	
self.doSomething()	
}
Arrayの実装 / タプル
Arrayの実装
Swift の Array は値型。顿颈肠迟颈辞苍补谤测も。
タプル
タプル。値をカンマ区切切りで括弧でくくったもの。
タプル
funcの引数や返値にも使える
for in で key, value の分離離に使える
COCOAPODSの使い?方
1. ?言語仕様
2. COCOAPODSの使い?方
3. ライブラリ绍介
COCOAPODSの使い?方
? SwiftからもCOCOAPODSは使える。
? ふつうに Podfile を書いて pod install する。
? プロジェクト名-Bridging-Header.h を作る。
? プロジェクトにObjective-Cの新規ファイルを追加すると「Bridging
Headerを作る?」というダイアログが出るのでそれで作るのがラク。
//	
// Use this file to import your target's public headers that you would like to
expose to Swift.	
//	
#import <AFNetworking/AFNetworking.h>
COCOAPODSの使い?方
AFNetworkingを使う例例
ライブラリ绍介
1. ?言語仕様
2. COCOAPODSの使い?方
3. ライブラリ绍介
ライブラリ绍介
? SwiftからObjective-Cのライブラリは使える。
? AFNetworkingも、SDWebImageも、MBProgressHUDも。
? ただ、それらのObjective-CのライブラリはObjective-Cのオブ
ジェクトを前提としている。
? 出来ればSwiftのライブラリを使いたい…。
SwiftyJSON
? JSONをSwiftで気持ちよくパースするためのライブラリ。
? 使わないと…
!
? 使うと…
shopName = 	
(((json as? NSArray)?[0] as? NSDictionary)?["shop"] as? NSDictionary)?["name"]
shopName = 	
json[0]["shop"]["name"].string
ALAMOFIRE
? Alamofire is an HTTP networking library written in Swift.
Think of it as AFNetworking, reimagined for the
conventions of this new language.
!
!
!
? Xcode beta6の仕様変更更で動かなくなってる…
	 	 Alamofire.request(.GET, "https://qiita.com/api/v1/tags.json").response {	
	 	 	 (request, response, data, error) in	
	 	 	 let json: [JSONValue] = JSONValue(data!).array	
	 	 	 for tag in tags {	
	 	 	 	 println(tag["name"].string)	
	 	 	 }	
	 	 }
5. 現時点でのおすすめ資料料
1. Xcode上でのSwiftの取り扱い
2. Objective-CからSwiftになって変わること変わらないこと
3. Objective-Cでのいつもの書き?方、Swiftでは?
4. Swift TIPS
5. 現時点でのおすすめ資料料
現時点でのおすすめ資料料
? Kindle
? 「先取り!Swift」
? iBooks
? 「Swift離離陸陸ガイド」
? 「The Swift Programming Language」
!
? Qiita
? Swiftタグ
ありがとうございました。
@tomzoh

More Related Content

Swift事情2014夏 ~ Swift入門 beta6対応