Jus*_*ath 3 for-loop swift swift3
我有这个循环,在Swift 2中按分区递减整数.
for var i = 128; i >= 1 ; i = i/2 {
//do some thing
}
Run Code Online (Sandbox Code Playgroud)
不推荐使用C风格的for循环,那么如何将其转换为Swift 3.0呢?
具有非恒定步幅的相当一般循环可以通过以下方式实现sequence:
for i in sequence(first: 128, next: { $0 >= 2 ? $0/2 : nil }) {
print(i)
}
Run Code Online (Sandbox Code Playgroud)
i是常量,其范围仅限于循环体.$0 >= 2代替i >= 1),并且对于第一个值,循环始终至少执行一次.还可以编写一个类似C-style for循环的包装器,并且没有列出的缺点(受Erica Sadun启发:有状态循环和序列):
public func sequence<T>(first: T, while condition: @escaping (T)-> Bool, next: @escaping (T) -> T) -> UnfoldSequence<T, T> {
let nextState = { (state: inout T) -> T? in
guard condition(state) else { return nil }
defer { state = next(state) }
return state
}
return sequence(state: first, next: nextState)
}
Run Code Online (Sandbox Code Playgroud)
然后用它作为
for i in sequence(first: 128, while: { $0 >= 1 }, next: { $0 / 2 }) {
print(i)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
244 次 |
| 最近记录: |