如何修复C风格的语句?

时间:2016-03-22 11:59:23

标签: ios swift swift2

为下面发布的代码修正 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...
    }
}

3 个答案:

答案 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)
}