【问题标题】:How replace position++ code to make it Swift 3 compatible?如何替换 position++ 代码以使其与 Swift 3 兼容?
【发布时间】:2016-03-26 21:43:36
【问题描述】:

我有以下类,它有方法getNextToken 来迭代数组项:

class Parser {
    let tokens: [Token]
    var position = 0

    init(tokens: [Token]) {
        self.tokens = tokens
    }

    func getNextToken() -> Token? {
        guard position < tokens.count else {
            return nil
        }
    return tokens[position++]
    }
}

但是我有一条来自编译器的警告消息,说 ++ 将在 Swift 3 中被弃用

我应该如何重写我的代码以让方法返回当前位置的数组项并在此之后增加位置?

增加一行position +=1 的标准建议不适合这里,因为我在评估tokens[position++] 时正退出范围

【问题讨论】:

    标签: swift


    【解决方案1】:

    defer 可用于增加position 变量 计算返回值之后:

    func getNextToken() -> Token? {
        guard position < tokens.count else {
            return nil
        }
        defer {
            position += 1
        }
        return tokens[position]
    }
    

    【讨论】:

      【解决方案2】:

      一种方法是在递增position 之前将token 分配给一个let 常量:

      func getNextToken() -> Token? {
          guard position < tokens.count else {
              return nil
          }
          let token = tokens[position]
          position += 1
          return token
      }
      

      另一种方法是保存current 的值position

      func getNextToken() -> Token? {
          guard position < tokens.count else {
              return nil
          }
          let current = position
          position += 1
          return tokens[current]
      }
      

      或者您可以撤消增量:

      func getNextToken() -> Token? {
          guard position < tokens.count else {
              return nil
          }
          position += 1
          return tokens[position - 1]
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-20
        • 1970-01-01
        • 2014-09-03
        • 1970-01-01
        • 2023-03-15
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多