为下面发布的代码修正 C-style for statement 的正确方法是什么?
目前我正在接受这场交战:
C-style for语句已弃用,将来会被删除 版本的Swift
var ifaddr : UnsafeMutablePointer<ifaddrs> = nil
if getifaddrs(&ifaddr) == 0 {
// Warning
for (var ptr = ifaddr; ptr != nil; ptr = ptr.memory.ifa_next) {
// Do some stuff...
}
}
答案 0 :(得分:7)
您可以将for
循环转换为while
循环:
var ptr = ifaddr
while ptr != nil {
// Do stuff
ptr = ptr.memory.ifa_next
}
答案 1 :(得分:3)
这是一个适合我的版本。
var ptr = ifaddr
repeat {
ptr = ptr.memory.ifa_next
if ptr != nil {
...
}
} while ptr != nil
答案 2 :(得分:0)
从Swift 3开始,您可以将sequence
用于广义循环,例如
遍历一个&#34;链表&#34;。这里:
var ifaddr : UnsafeMutablePointer<ifaddrs>?
if getifaddrs(&ifaddr) == 0 {
if let firstAddr = ifaddr {
for ptr in sequence(first: firstAddr, next: { $0.pointee.ifa_next }) {
// ...
}
}
freeifaddrs(ifaddr)
}