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
・ ⾔言語仕様
・ Optional型
・ ARC
・ Arrayの実装 / タプル
・ COCOAPODSの使い⽅方
・ ライブラリ紹介
・ SwiftyJSON
・ ALAMOFIRE
⾔言語仕様
1. ⾔言語仕様
2. COCOAPODSの使い⽅方
3. ライブラリ紹介
Optional型
Optional型
・ Objective-C の NSString には nil が⼊入る。
・ Swift の String には nil は⼊入らない。
・ nil を⼊入れたい場合は Optional<String> 型を使う。
・ String 型として使いたい場合 Optional<String> 型のままでは使えな
いので String 型を取り出して使う。
・ これを「アンラップ」と⾔言う。

(String 型が Optional<String> 型に「ラップされている」)
・ アンラップにはいくつかの⽅方法がある。
Optional型
nilを⼊入れるならOptional型に。
Optional<String>型はそのままでは使えない
Optional型 - アンラップ
アンラップして String 型として使える様にする
アンラップは複数の⽅方法がある
?はOptional Chaining、!はForced Unwrapping
Optional型 - アンラップ
if や while の中でアンラップする⽅方法は Optional Binding
・ let でも var でもOK
・ unwrappedStr は String 型
・ optionalStr が nil の場合は if の条件式の評価が false になる
Optional型 - アンラップ
Implicitly Unwrapped Optional 型で宣⾔言する
使⽤用時に強制的にアンラップされる
Implicitly Unwrapped Optional 型に nil が⼊入っているとランタイムエラー
Optional型 - シンタックスシュガー
・ シンタックスシュガー
・ 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 は値型。Dictionaryも。
タプル
タプル。値をカンマ区切切りで括弧でくくったもの。
タプル
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

PDF
Swiftによる関数型プログラミング超入門
PDF
Swiftでの関数型プログラミングについて考えていること
PPTX
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
PDF
Apple審査を一発通過! iOS開発経験0でも出来る じげん流Swift開発のすべて
PDF
Swiftだめ自慢Beta5
PDF
Optionalの使い方 第1回 Swift勉強会@ネクスト
PPTX
iOSでライブラリを提供する際に気をつけたいこと
PDF
Xcode 7 の新しいところ #cm_ios9
Swiftによる関数型プログラミング超入門
Swiftでの関数型プログラミングについて考えていること
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Apple審査を一発通過! iOS開発経験0でも出来る じげん流Swift開発のすべて
Swiftだめ自慢Beta5
Optionalの使い方 第1回 Swift勉強会@ネクスト
iOSでライブラリを提供する際に気をつけたいこと
Xcode 7 の新しいところ #cm_ios9

What's hot (20)

PDF
iOSでのFramework導入のおさらい #関モバ
PDF
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
PPTX
おっさんES6/ES2015,React.jsを学ぶ
PDF
Railsしかやってなかった人が10時間で Swift iOSゲームをつくったら
PPTX
Movable Type Data API Swiftアプリ作成事例
KEY
Rubymotionはオススメか?
PPTX
サクサクアンドロイド
PDF
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
PDF
Rubyを使ったスマホアプリのUIテスト
PDF
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
PDF
Xcode グループとフォルダー参照 #yhios
PDF
Rubyのススメ
PPTX
ライブラリの依存関係で困ったときにやってみたことLt
PDF
ObjectMapperでJSONマッピング
PDF
Himotoki: A type-safe JSON decoding library #関モバ
PPTX
アプリ開発作業の効率改善
PDF
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
PDF
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
PDF
ライブラリでよくある動きをUIKitのみでDIYしてみる(Part1)
PDF
Continuous Integration for Pharo Smalltalk - Smalltalkと継続的インテグレーション
iOSでのFramework導入のおさらい #関モバ
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
おっさんES6/ES2015,React.jsを学ぶ
Railsしかやってなかった人が10時間で Swift iOSゲームをつくったら
Movable Type Data API Swiftアプリ作成事例
Rubymotionはオススメか?
サクサクアンドロイド
【ヒカ☆ラボ】初心者向けSwiftアプリのリファクタリング
Rubyを使ったスマホアプリのUIテスト
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
Xcode グループとフォルダー参照 #yhios
Rubyのススメ
ライブラリの依存関係で困ったときにやってみたことLt
ObjectMapperでJSONマッピング
Himotoki: A type-safe JSON decoding library #関モバ
アプリ開発作業の効率改善
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
ライブラリでよくある動きをUIKitのみでDIYしてみる(Part1)
Continuous Integration for Pharo Smalltalk - Smalltalkと継続的インテグレーション
Ad

Similar to Swift事情2014夏 ~ Swift入門 beta6対応 (20)

PDF
Objective-Cプログラマのためのswift導入法
PDF
20140822 Swift 勉強会 vol.3 - はぢめての Swift
PDF
iOS 8/Swift 概要 #ios8yahoo
PDF
iOS開発でのおすすめライブラリと管理
PDF
東京Node学園 今できる通信高速化にトライしてみた
PDF
Swiftってどうよ!!(cocoa勉強会関西@20150228)
PDF
SwiftによるiOS開発再入門
PDF
開発技術対決! Dots.カンファレンス エキシビジョン iOS代表
PPTX
【Swift】 それ、enumとstructでやってみましょう!!
PDF
Svgアニメーションを実装してみよう 20150207
PDF
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
PDF
Swift 3 その基本ルールを眺める #cswift
PDF
iOS開発を楽しむ最初の一歩!デリゲートをなるべく分かりやすく!
PDF
Swiftビギナーズ勉強会 第1回 @Co-Edo
PDF
Study Swift
PDF
Nullabilityについて
PDF
Swift afterbeginner
PDF
Swiftの魅力と可能性 2
PDF
チーム開発にSwiftLintを導入してみた・詳細版
PDF
Swiftの実際ダメな所
Objective-Cプログラマのためのswift導入法
20140822 Swift 勉強会 vol.3 - はぢめての Swift
iOS 8/Swift 概要 #ios8yahoo
iOS開発でのおすすめライブラリと管理
東京Node学園 今できる通信高速化にトライしてみた
Swiftってどうよ!!(cocoa勉強会関西@20150228)
SwiftによるiOS開発再入門
開発技術対決! Dots.カンファレンス エキシビジョン iOS代表
【Swift】 それ、enumとstructでやってみましょう!!
Svgアニメーションを実装してみよう 20150207
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
Swift 3 その基本ルールを眺める #cswift
iOS開発を楽しむ最初の一歩!デリゲートをなるべく分かりやすく!
Swiftビギナーズ勉強会 第1回 @Co-Edo
Study Swift
Nullabilityについて
Swift afterbeginner
Swiftの魅力と可能性 2
チーム開発にSwiftLintを導入してみた・詳細版
Swiftの実際ダメな所
Ad

More from Tomoki Hasegawa (20)

PDF
Reading php terminal-gameboy-emulator
PDF
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
PDF
とある受託ベンダの開発環境
PDF
iOS Developers Conference Japan 2016
PDF
エンジニアのお祭り
PDF
勉強会のこちら側とあちら側
PDF
tvOSでWebSocketを使う
PDF
「これを買っている人はこれも買っています」実装してみた PHP side
PDF
tvOSネイティブアプリを作る
PDF
「これを買っている人はこれも買っています」実装してみた
PDF
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
PDF
TestFlightみたいなのを自作する
PDF
PHPでスマホアプリにプッシュ通知する
PDF
Stargazer Meetup #1
PDF
PUSH通知証明書作成ツールを作った
PDF
PHPカンファレンス福岡に 行ってきた
PDF
CakePHP3ウォークスルー
PDF
はじめてのiOSアプリ開発 Swift対応版
PDF
AppStore申請を一式まるっと自動化する
PDF
PHPerのためのSwift入門
Reading php terminal-gameboy-emulator
Drupal8 〜 モダンなアーキテクチャのPHPベース OSS CMS
とある受託ベンダの開発環境
iOS Developers Conference Japan 2016
エンジニアのお祭り
勉強会のこちら側とあちら側
tvOSでWebSocketを使う
「これを買っている人はこれも買っています」実装してみた PHP side
tvOSネイティブアプリを作る
「これを買っている人はこれも買っています」実装してみた
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
TestFlightみたいなのを自作する
PHPでスマホアプリにプッシュ通知する
Stargazer Meetup #1
PUSH通知証明書作成ツールを作った
PHPカンファレンス福岡に 行ってきた
CakePHP3ウォークスルー
はじめてのiOSアプリ開発 Swift対応版
AppStore申請を一式まるっと自動化する
PHPerのためのSwift入門

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