39. for文
for var i = 0; i < 10; i++ {
…
}
for i in 0..<10 {
// 0~9
}
for i in 0…10 {
// 0~10
}
40. let data = [("Joseph","America"), ("Jotaro","Japan")]
!
for (key, val) in data {
println("(key) is from (val).")
}
41. switch文
switch country {
case "France":
println("ポワレ!")
case "China":
println("青椒肉絲!")
case "America":
println("にく!")
case "Canada":
println("しゃけ!")
default:
println("麦!")
}
Objective-Cではできなかったオブジェクトが使える!
60. Optional型: Forced Unwrapping
public class WrappedObj {
var someString: String = "ほげほげ"
}
!
public class TestObj {
func callWrapObj {
var wrappedObj:WrappedObj? = WrappedObj()
!
var anotherObj = wrappedObj!.someString;
}
}
61. public class WrappedObj {
var someString: String = "ほげほげ"
}
!
public class TestObj {
func callWrapObj {
var wrappedObj:WrappedObj? //nil
!
var anotherObj = wrappedObj!.someString;
// -> Runtime error: unexpectedly found nil while unwrapping an Optional value
}
}
ランタイムエラーになる
62. Optional型: Optional Chaining
public class WrappedObj {
var someString: String = "ほげほげ"
}
!
public class TestObj {
func callWrapObj {
var wrappedObj:WrappedObj? = WrappedObj()
!
var anotherObj = wrappedObj?.someString;
}
}
63. public class WrappedObj {
var someString: String = "ほげほげ"
}
!
public class TestObj {
func callWrapObj {
var wrappedObj:WrappedObj? //nil
!
var anotherObj = wrappedObj?.someString;
}
}
nilが返される
anotherObjにnilが入ってしまわないのか?
64. public class WrappedObj {
var someString: String = "ほげほげ"
}
!
public class TestObj {
func callWrapObj {
var wrappedObj:WrappedObj? //nil
!
var anotherObj = wrappedObj?.someString;
}
}
1. wrappedObjがアンラップされる
2. StringのsomeStringが返される
3. someStringがラップされる
4. anotherObjにラップされたsomeStringが代入される
65. Optional型:Optional Binding
var wrapped: WrappedObj?
if var unwrapped = wrapped {
var anotherString = unwrapped.someString
}
unwrappedがnilだった場合
結果はfalseとなりifの中は実行されない
unwrappedはラップされない
69. var implWrapped: WrappedObj! //nil
var implString = implWrapped.someString;
// -> Runtime error: unexpectedly found nil while unwrapping an Optional value
ランタイムエラーになる
70. ??演算子
var result = number != nil ? number : 0
var number:Int? = 1
こういう場合
var result = number ?? 0
=
71. 型推論
var name = "勇者"
var hp = 700
let ratio = 2.5
型を自動的に決めてくれる!
var name:String = "勇者"
var hp:Int = 700
let ratio:Float = 2.5
もちろん明示的に指定もできる
72. ジェネリクス
メソッド・構造体・プロトコルなどについて
これらを呼び出す側が引数、メンバ、戻り値などの型を
指定できるシステム
var one:Int = 1
var two:Int = 2
var three:Int = 3
!
var m = max(one,two,three)
var one:Float = 1.0
var two:Float = 2.0
var three:Float = 3.0
!
var m = max(one,two,three)
var one:String = "1"
var two:String = "2"
var three:String = "3"
!
var m = max(one,two,three)
74. func repeat(item:Int, times:Int) -> [Int] {
var result = [Int]()
for i in 0...times {
result.append(item)
}
return result
}
!
repeat(10, 3) //[10,10,10]
repeat(“a”, 3) //エラー
Intだけでなく他の型の引数をとれるようにしたい!
func repeat<T>(item:T, times:Int) -> [T] {
var result = [T]()
for i in 0...times {
result.append(item)
}
return result
}
!
repeat(10, 3) //[10,10,10]
repeat(“a”, 3) //[“a”,”a”,”a”]
76. タプル
var tuple = ("月野うさぎ", 14)
var name = tuple.0 //“月野うさぎ”
var age = tuple.1 //14
var tuple = (name:”月野うさぎ", age:14)
var name = tuple.name //“月野うさぎ”
var age = tuple.age //14
要素に名前をつけることもできる