25. // 型に ! を添えて定義する(従前どおり)
let implicitly: Int! = 100
// 型明記せずに受けると、その変数は普通の Optional 型
let optional = implicitly
Int?
26. // Int! を返す関数があったとき …
func something() -> Int! {…}
// 暗黙アンラップとして即使用する方法(受け手は戻り値の型)
let result = something().advanced(by: 1)
// 速やかに解消する方法(受け手は Int 型)
let result = something()!
// nil の可能性を残して先へ(受け手は Int? 型)
let result = something()
34. let fibonacci = AnySequence {()-> AnyIterator<Int> in
var data = (0, 1)
return AnyIterator {
defer {
data = (data.1, data.0 + data.1)
}
return data.1
}
}
35. var previous2 = 0
let fibonacci = sequence(first: 1) { previous1 in
defer {
previous2 = previous1
}
return previous1 + previous2
}
36. let fibonacci = sequence(state: (0, 1)) {
(state: inout (Int, Int)) -> Int? in
defer {
state = (state.1, state.0 + state.1)
}
return state.1
}
37.
38. // Swift 3 での探し方
let value: Int? = fibonacci.first { $0 > 100 }
// Swift 2 での探し方
var value: Int? {
for v in fibonacci where v > 100 {
return v
}
return nil
}
39.
40. // 次のインデックスを取得
let next = index.successor()
// 前のインデックスを取得
let previous = index.predeessor()
41. // 扱うインデックスの範囲
let indices = items.indices
// あるインデックスの次を取得
let next = items.index(after: index)
// あるインデックスの前を取得
let previous = items.index(before: index)