如何修复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) }