Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
EZ-‐‑‒NET  熊⾕谷友宏  
http://ez-‐‑‒net.jp/
Swift  を振り返ってみよう
2015.06.06  
カジュアル  Swift  プログラミング  #0
Swift 楽しい!
熊谷友宏
http://ez-net.jp/
@es_kumagai
Xcode 5 徹底解説
IP Phone 音でダイヤル 音で再配達ゴッド
いつもの電卓
with 割勘ウォッチ
MOSA
新言語 Swift 登場
2014.06.02 @ WWDC 2014
特徴
1. Fast

動的言語らしさをなくして高速化
2. Modern

親しみやすい言語設計
3. Safe

不測の事態を招かない言語設計
4. Interactive

コンパイル言語でありながら即時実行が可能
コンセプト
Objective-C
without the C
― C 言語構造からの訣別 ―
新しい概念
1. Closures

関数を柔軟に扱う
2. Type inference

型推論で効率良くコーディング
3. Multiple return types

戻り値で複数の値を返せる
4. Generics

型に縛られない実...
互換性
1. Interoperability

Swift クラスを Objective-C から使用

Cocoa API を Swift コードから利用
2. Mix and Match

Objective-C ファイルと Swift ...
Swift の特徴
1. Fast
⚫
Objective-C より速いらしい
⚫
静的解決が主体
⚫
最適化しやすい言語設計
2. Modern
NSArray *array = @[ @"A", @"B", @"C" ];
NSString *string =

[array componentsJoinedByString:@", "];
NSLog(@"Valu...
⚫
nil を意識したコーディング
⚫
型は えて計算する
⚫
switch で全ケースの網羅が必要
⚫
例外の廃止
3. Safe
不測を生まないコードが書ける

▶ 不測を含まないコードを強要される
4. Interactive
⚫
Xcode からの逐次実行

Playground
⚫
ターミナルからの逐次実行

#!/usr/bin/swift
ビルド操作不要でコードを実行可能
Objective-C
without the C
行末文字からの訣別
i += 10;
Objective-C
i += 10
Swift
行末のセミコロンを省略可能に
条件文の括弧からの訣別
if (i == 10)
{
}
Objective-C
if i == 10 {
}
Swift
評価式の外側括弧を省略可能に
プリミティブからの脱却
⚫
Int や enum も機能を持てる
⚫
関数も変数で普通に扱える
すべての型の対等な扱いが可能に
C リテラルからの訣別
NSString *str = @"OBJC STRING";
NSNumber *num = @10;
char* str = "C STRING";
int num = 10;
Objective-C
let str...
リテラル表現の簡素化
NSArray *arr = @[ @5, @10 ];
NSDictionary *dic = @{ @"K1":@1, @"K2":@2 };
let arr:[Int] = [ 5, 10 ]
let dic:[St...
変数の刷新
NSInteger i = 10;
const NSInteger i = 10;
NSString* s = @"TEXT";
NSMutableString* s = [@"TEXT" mutableCopy];
Objecti...
文字列リテラルの拡張(展開)
NSString *str = [NSString
stringWithFormat:@"Name=%@, Value=%d",
name, value];
Objective-C
let str:String
=...
文字列リテラルの拡張(連結)
NSString *str = [@"MSM"
stringByAppendingString:@"2014"];
Objective-C
let str:String = "MSM" + "2014"
Swift...
文字列リテラルの拡張(比較)
if ([string1 isEqualToString:string2])
{
}
Objective-C
if string1 == string2 {
}
Swift
演算子による文字列比較が可能に
名前付き引数
[MyClass methodWithValue:10.0 ofType:@"$"]
Objective-C
MyClass.method(value:10.0, ofType:"$")
Swift
引数にラベル名を付与可能に
新しいデータ型
// タプル…複数の型を自由に組み合わせられる
let value:(Int,String) = (200, "SWIFT")
// nil 許容型…値の他に「ない」状態を扱える
let value:Int? = nil
// ...
switch 構文の大幅な拡張
⚫
変数に格納した値を使った分岐
⚫
範囲による分岐
⚫
文字列による分岐
⚫
タプルの値に応じた分岐
⚫
値つき列挙型の値に応じた分岐
整数値リテラル以外でも分岐が可能に
数値リテラル
さりげなく嬉しい機能
let dec = 200 // 10進数
let hex = 0xc8 // 16進数
let oct = 0o310 // 8進数
let bin = 0b11001000 // 2進数
let d = ...
⚫
ヘッダーファイル不要
⚫
同じ名前で異なる引数の関数
⚫
引数の既定値
ほかにもいろいろ
Objective-C without the C
C 言語のしがらみを捨てることで
言語機能を大幅に向上
Objective-C without the C
不不変値  
可変値
構造体
プロトコル
ジェネリック
Objective-C C
Swift
Swift の新しい概念
Closure
// クロージャの定義
let isOK:(Int)->Bool = {(code:Int)->Bool in
return contains(200..<300, code)
}
// 関数のように実行
let result ...
Type inference
型が明らかなら記述不要
⚫
初期値を伴う変数や定数の宣言
⚫
コレクションから要素を順次取得
⚫
列挙型を扱うことが明確な場合
⚫
制御構文で let で値の対応を取る
⚫
クロージャの戻り値や引数
Multiple return types
func getStatus()->(code:Int, status:String) {
return (200, "OK")
}
Swift
戻り値で複数の値を返せる
enum Status {
...
Generics
func add<T:IntegerArithmeticType>(v1:T, v2:T)->T {
return value1 + value2
}
Swift
型に縛られない実装
⚫
任意の型を扱える
⚫
コードの共通化・...
Namespaces
import MyModule1
import MyModule2
let obj1 = MyModule1.MyClass()
let obj2 = MyModule2.MyClass()
Swift
Swift の新し...
Objective-C との互換性
Interoperability
Objective-C と Swift の相互運用
Interoperability
Swift と Objective-C の互換性
Swift クラスを Objective-C で使用可能
⚫
NSObject の継承または @objc 属性が必須
⚫
メソッド名が Objective-C ...
Interoperability
Swift と Objective-C の互換性
Swift クラスを Objective-C で使用可能
MyClass* obj
= [[MyClass alloc] initWithValue:10];
...
Interoperability
Swift と Objective-C の互換性
Cocoa API を Swift から利用可能
⚫
ほぼ全てを Swift らしいコードで利用可能
⚫
利用できないものもある
let value:NSStr...
Mix and Match
Objective-C と Swift との混在
Swift と Objective-C の互換性
Mix and Match
Swift と Objective-C の互換性
Objective-C ファイルと Swift ファイルを混在
Migration
既存の Objective-C を Swift で活用
Swift と Objective-C の互換性
Migration
Swift と Objective-C の互換性
自作 Objective-C クラスを Swift で使用
⚫
プロジェクトの Build Settings で

Objective-C Bridging Header を...
let obj = MyClass(value:10)
obj.value
Migration
Swift と Objective-C の互換性
自作 Objective-C クラスを Swift で使用
@interface MyClass ...
Objective-C と Swift の
相互乗り入れが非常にしやすい
― 小さい単位での Swift への移行が可能 ―
現代らしさを積極的に取り入れながら
既存の環境でもすぐに使える言語
Swift
を握るところ
2種類の変数
変数が意味を持つ時代へ
• 不変値変数 let

値 を表現する
• 可変値変数 var

状態 を表現する
// 平面を動く物体の座標
var location:(x,y)
// 平面座標の値
let location:(x,y)
2種類の変数
変数が意味を持つ時代へ
オプショナル
⚫
値がある場合とない場合をとる
⚫
存在しないことを意識でき
⚫
Optional<T> と

ImplicitlyUnwrappedOptional<T>
存在しないを扱える型
生まれ変わった構造体
⚫
値や状態を表現する
⚫
内容を自由に設計できる
⚫
格納先に応じて振る舞いが変化
変数に特化した型の誕生
列挙型と switch
⚫
選択肢を有限に絞れる
⚫
取り得る範囲が明確になる
⚫
想定外を検出できる
安全性に着目した網羅性のコンセプト
Swift を楽しみましょう!
Upcoming SlideShare
Loading in …5
×

Swift を振り返ってみよう #cswift

1,700 views

Published on

2015.06.06 に開催した『第0回 カジュアル Swift プログラミング勉強会』で発表したスライドです。

勉強会が第0回ということと、Swift が1周年を迎えたことから、今に改めて振り返ってみると何か発見があったりするのかなと思って、簡単ながらこんなスライドにまとめてみました。

Published in: Engineering
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Swift を振り返ってみよう #cswift

  1. 1. EZ-‐‑‒NET  熊⾕谷友宏   http://ez-‐‑‒net.jp/ Swift  を振り返ってみよう 2015.06.06   カジュアル  Swift  プログラミング  #0
  2. 2. Swift 楽しい!
  3. 3. 熊谷友宏 http://ez-net.jp/ @es_kumagai Xcode 5 徹底解説 IP Phone 音でダイヤル 音で再配達ゴッド いつもの電卓 with 割勘ウォッチ MOSA
  4. 4. 新言語 Swift 登場 2014.06.02 @ WWDC 2014
  5. 5. 特徴 1. Fast
 動的言語らしさをなくして高速化 2. Modern
 親しみやすい言語設計 3. Safe
 不測の事態を招かない言語設計 4. Interactive
 コンパイル言語でありながら即時実行が可能
  6. 6. コンセプト Objective-C without the C ― C 言語構造からの訣別 ―
  7. 7. 新しい概念 1. Closures
 関数を柔軟に扱う 2. Type inference
 型推論で効率良くコーディング 3. Multiple return types
 戻り値で複数の値を返せる 4. Generics
 型に縛られない実装 5. Namespaces
 モジュール単位での名前空間
  8. 8. 互換性 1. Interoperability
 Swift クラスを Objective-C から使用
 Cocoa API を Swift コードから利用 2. Mix and Match
 Objective-C ファイルと Swift ファイルを
 ひとつのプロジェクトに混在して併用 3. Migration
 既存の Objective-C コードを Swift から
 Swift らしい構文で利用
  9. 9. Swift の特徴
  10. 10. 1. Fast ⚫ Objective-C より速いらしい ⚫ 静的解決が主体 ⚫ 最適化しやすい言語設計
  11. 11. 2. Modern NSArray *array = @[ @"A", @"B", @"C" ]; NSString *string =
 [array componentsJoinedByString:@", "]; NSLog(@"Value: %@", string); Objective-C let array = [ "A", "B", "C" ] let string = join(", ", array)
 println("Value: (string)") Swift
  12. 12. ⚫ nil を意識したコーディング ⚫ 型は えて計算する ⚫ switch で全ケースの網羅が必要 ⚫ 例外の廃止 3. Safe 不測を生まないコードが書ける
 ▶ 不測を含まないコードを強要される
  13. 13. 4. Interactive ⚫ Xcode からの逐次実行
 Playground ⚫ ターミナルからの逐次実行
 #!/usr/bin/swift ビルド操作不要でコードを実行可能
  14. 14. Objective-C without the C
  15. 15. 行末文字からの訣別 i += 10; Objective-C i += 10 Swift 行末のセミコロンを省略可能に
  16. 16. 条件文の括弧からの訣別 if (i == 10) { } Objective-C if i == 10 { } Swift 評価式の外側括弧を省略可能に
  17. 17. プリミティブからの脱却 ⚫ Int や enum も機能を持てる ⚫ 関数も変数で普通に扱える すべての型の対等な扱いが可能に
  18. 18. C リテラルからの訣別 NSString *str = @"OBJC STRING"; NSNumber *num = @10; char* str = "C STRING"; int num = 10; Objective-C let str:String = "SWIFT STRING" let num:Int = 10 Swift C リテラルの考慮が不要に
  19. 19. リテラル表現の簡素化 NSArray *arr = @[ @5, @10 ]; NSDictionary *dic = @{ @"K1":@1, @"K2":@2 }; let arr:[Int] = [ 5, 10 ] let dic:[String:Int] = [ "K1": 1, "K2": 2 ] Swift Objective-C オブジェクトを意味する "@" が不要に
  20. 20. 変数の刷新 NSInteger i = 10; const NSInteger i = 10; NSString* s = @"TEXT"; NSMutableString* s = [@"TEXT" mutableCopy]; Objective-C var i = 10 let i = 10 let s = "TEXT" var s = "TEXT" Swift 二種類の変数を利用可能に
  21. 21. 文字列リテラルの拡張(展開) NSString *str = [NSString stringWithFormat:@"Name=%@, Value=%d", name, value]; Objective-C let str:String = "Name=(name), Value=(value)" Swift リテラル内で変数を展開可能に
  22. 22. 文字列リテラルの拡張(連結) NSString *str = [@"MSM" stringByAppendingString:@"2014"]; Objective-C let str:String = "MSM" + "2014" Swift 演算子で文字列を連結可能に
  23. 23. 文字列リテラルの拡張(比較) if ([string1 isEqualToString:string2]) { } Objective-C if string1 == string2 { } Swift 演算子による文字列比較が可能に
  24. 24. 名前付き引数 [MyClass methodWithValue:10.0 ofType:@"$"] Objective-C MyClass.method(value:10.0, ofType:"$") Swift 引数にラベル名を付与可能に
  25. 25. 新しいデータ型 // タプル…複数の型を自由に組み合わせられる let value:(Int,String) = (200, "SWIFT") // nil 許容型…値の他に「ない」状態を扱える let value:Int? = nil // 値つき列挙型…自由な値を持てる列挙子 enum Enumerate { case Name(String) case NoName } Swift しがらみのないスマートな書式に
  26. 26. switch 構文の大幅な拡張 ⚫ 変数に格納した値を使った分岐 ⚫ 範囲による分岐 ⚫ 文字列による分岐 ⚫ タプルの値に応じた分岐 ⚫ 値つき列挙型の値に応じた分岐 整数値リテラル以外でも分岐が可能に
  27. 27. 数値リテラル さりげなく嬉しい機能 let dec = 200 // 10進数 let hex = 0xc8 // 16進数 let oct = 0o310 // 8進数 let bin = 0b11001000 // 2進数 let d = 2.10 let d = 1.25e-4 // 1.25×10-4 let d = 0x15p3 // 0x15×23
  28. 28. ⚫ ヘッダーファイル不要 ⚫ 同じ名前で異なる引数の関数 ⚫ 引数の既定値 ほかにもいろいろ Objective-C without the C
  29. 29. C 言語のしがらみを捨てることで 言語機能を大幅に向上 Objective-C without the C
  30. 30. 不不変値   可変値 構造体 プロトコル ジェネリック Objective-C C Swift
  31. 31. Swift の新しい概念
  32. 32. Closure // クロージャの定義 let isOK:(Int)->Bool = {(code:Int)->Bool in return contains(200..<300, code) } // 関数のように実行 let result = isOK(200) // 別の関数の引数に渡して実行 let result = contains(statuses, isOK) Swift 即席関数をシンプルに作って使える
  33. 33. Type inference 型が明らかなら記述不要 ⚫ 初期値を伴う変数や定数の宣言 ⚫ コレクションから要素を順次取得 ⚫ 列挙型を扱うことが明確な場合 ⚫ 制御構文で let で値の対応を取る ⚫ クロージャの戻り値や引数
  34. 34. Multiple return types func getStatus()->(code:Int, status:String) { return (200, "OK") } Swift 戻り値で複数の値を返せる enum Status { case OK case Failed(String) } func getStatus()->Status { return Status.OK } Swift
  35. 35. Generics func add<T:IntegerArithmeticType>(v1:T, v2:T)->T { return value1 + value2 } Swift 型に縛られない実装 ⚫ 任意の型を扱える ⚫ コードの共通化・実装の効率化 ⚫ プロトコル主体のコーディング
  36. 36. Namespaces import MyModule1 import MyModule2 let obj1 = MyModule1.MyClass() let obj2 = MyModule2.MyClass() Swift Swift の新しい概念 モジュール単位での名前空間 ⚫ モジュール単位で空間を分離 ⚫ 同じ名前の異なる型を識別可能
  37. 37. Objective-C との互換性
  38. 38. Interoperability Objective-C と Swift の相互運用
  39. 39. Interoperability Swift と Objective-C の互換性 Swift クラスを Objective-C で使用可能 ⚫ NSObject の継承または @objc 属性が必須 ⚫ メソッド名が Objective-C 的に自動調整 ⚫ @objc クラスではインスタンスを返すための
 クラスメソッドの実装が必要 ⚫ Objective-C にない機能を使ったものは不可
 オーバーロード, Generics, …
  40. 40. Interoperability Swift と Objective-C の互換性 Swift クラスを Objective-C で使用可能 MyClass* obj = [[MyClass alloc] initWithValue:10]; obj.value; class MyClass : NSObject { var value:Int init(value:Int) } Swift Objective-C ― #import "PROJNAME-Swift.h" で利用可能に ―
  41. 41. Interoperability Swift と Objective-C の互換性 Cocoa API を Swift から利用可能 ⚫ ほぼ全てを Swift らしいコードで利用可能 ⚫ 利用できないものもある let value:NSString = "TEST STRING" value.stringByReplacingOccurrencesOfString("TEST", withString: "SWIFT", options: NSStringCompareOptions.LiteralSearch, range: NSMakeRange(0, value.length)) Swift ― import Foundation 等で利用可能に ―
  42. 42. Mix and Match Objective-C と Swift との混在 Swift と Objective-C の互換性
  43. 43. Mix and Match Swift と Objective-C の互換性 Objective-C ファイルと Swift ファイルを混在
  44. 44. Migration 既存の Objective-C を Swift で活用 Swift と Objective-C の互換性
  45. 45. Migration Swift と Objective-C の互換性 自作 Objective-C クラスを Swift で使用 ⚫ プロジェクトの Build Settings で
 Objective-C Bridging Header を登録 ⚫ そこへ Swift で使いたいヘッダーファイルを
 #import すると Swift で利用可能になる ⚫ C++ / Objective-C++ コードは利用不可
 ヘッダーに C++ 固有の機能さえなければ OK ― Swift 側で import する必要なく利用可能 ―
  46. 46. let obj = MyClass(value:10) obj.value Migration Swift と Objective-C の互換性 自作 Objective-C クラスを Swift で使用 @interface MyClass : NSObject @property (readwrite) NSInteger value; - (instancetype)initWithValue:(NSInteger)value; @end Swift Objective-C
  47. 47. Objective-C と Swift の 相互乗り入れが非常にしやすい ― 小さい単位での Swift への移行が可能 ―
  48. 48. 現代らしさを積極的に取り入れながら 既存の環境でもすぐに使える言語 Swift
  49. 49. を握るところ
  50. 50. 2種類の変数 変数が意味を持つ時代へ • 不変値変数 let
 値 を表現する • 可変値変数 var
 状態 を表現する
  51. 51. // 平面を動く物体の座標 var location:(x,y) // 平面座標の値 let location:(x,y) 2種類の変数 変数が意味を持つ時代へ
  52. 52. オプショナル ⚫ 値がある場合とない場合をとる ⚫ 存在しないことを意識でき ⚫ Optional<T> と
 ImplicitlyUnwrappedOptional<T> 存在しないを扱える型
  53. 53. 生まれ変わった構造体 ⚫ 値や状態を表現する ⚫ 内容を自由に設計できる ⚫ 格納先に応じて振る舞いが変化 変数に特化した型の誕生
  54. 54. 列挙型と switch ⚫ 選択肢を有限に絞れる ⚫ 取り得る範囲が明確になる ⚫ 想定外を検出できる 安全性に着目した網羅性のコンセプト
  55. 55. Swift を楽しみましょう!

×