8. 互換性
1. Interoperability
Swift クラスを Objective-C から使用
Cocoa API を Swift コードから利用
2. Mix and Match
Objective-C ファイルと Swift ファイルを
ひとつのプロジェクトに混在して併用
3. Migration
既存の Objective-C コードを Swift から
Swift らしい構文で利用
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 リテラルの考慮が不要に
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. 文字列リテラルの拡張(展開)
NSString *str = [NSString
stringWithFormat:@"Name=%@, Value=%d",
name, value];
Objective-C
let str:String
= "Name=(name), Value=(value)"
Swift
リテラル内で変数を展開可能に
22. 文字列リテラルの拡張(連結)
NSString *str = [@"MSM"
stringByAppendingString:@"2014"];
Objective-C
let str:String = "MSM" + "2014"
Swift
演算子で文字列を連結可能に
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
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
即席関数をシンプルに作って使える
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