【问题标题】:How to fix C-style for statement?如何修复 C 风格的语句?
【发布时间】:2016-03-22 11:59:23
【问题描述】:

为下面发布的代码修复C-style for statement的正确方法是什么?

目前我正在交战:

C 风格的 for 语句已被弃用,未来将被移除 斯威夫特版本

var ifaddr : UnsafeMutablePointer<ifaddrs> = nil
if getifaddrs(&ifaddr) == 0 {
    // Warning
    for (var ptr = ifaddr; ptr != nil; ptr = ptr.memory.ifa_next) {
        // Do some stuff...
    }
}

【问题讨论】:

  • 嘿,拉米斯,我的回答对你有帮助吗?如果您有任何其他问题,请告诉我。
  • @JAL 抱歉,因为忙于其他问题,所以没有机会尝试。

标签: ios swift swift2


【解决方案1】:

您可以将for 循环转换为while 循环:

var ptr = ifaddr
while ptr != nil {
    // Do stuff
    ptr = ptr.memory.ifa_next
}

【讨论】:

    【解决方案2】:

    这是一个适合我的版本。

    var ptr = ifaddr
    repeat {
       ptr = ptr.memory.ifa_next
       if ptr != nil {
          ...
       }
    } while ptr != nil
    

    【讨论】:

      【解决方案3】:

      从 Swift 3 开始,您可以将 sequence 用于通用循环,例如 作为遍历“链表”。这里:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-19
        • 2015-01-26
        • 2021-03-27
        • 2019-02-26
        • 2021-01-17
        • 1970-01-01
        相关资源
        最近更新 更多