如何修复C风格的语句?
对于下面发布的代码,修复C-style for statement的正确方法是什么?
目前我正在接受这场战争:
不推荐使用C-style for语句,将在未来的Swift版本中删除
var ifaddr : UnsafeMutablePointer = nil if getifaddrs(&ifaddr) == 0 { // Warning for (var ptr = ifaddr; ptr != nil; ptr = ptr.memory.ifa_next) { // Do some stuff... } }
您可以将for
循环转换为while
循环:
var ptr = ifaddr while ptr != nil { // Do stuff ptr = ptr.memory.ifa_next }
这是一个适合我的版本。
var ptr = ifaddr repeat { ptr = ptr.memory.ifa_next if ptr != nil { ... } } while ptr != nil
从Swift 3开始,您可以使用sequence
进行通用循环,例如遍历“链表”。 这里:
var ifaddr : UnsafeMutablePointer? if getifaddrs(&ifaddr) == 0 { if let firstAddr = ifaddr { for ptr in sequence(first: firstAddr, next: { $0.pointee.ifa_next }) { // ... } } freeifaddrs(ifaddr) }