2016-03-26 40 views
2

我有以下類,它有方法getNextToken遍歷數組項:如何替換位置++代碼使其與Swift 3兼容?

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++] 
    } 
} 

,但我從編譯器+ +將在斯威夫特3

我應該如何重寫我的代碼被廢棄的警告消息讓方法在當前位置返回數組項,然後增加位置?

標準建議增加一個行position +=1不適合這裏,因爲我是從範圍退出什麼時候我正在評估tokens[position++]

回答

5

defer可用於遞增position變量 後的返回值已經計算:

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

的方法之一是分配token到讓不斷遞增position前:

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 
    } 
    position += 1 
    return tokens[position - 1] 
} 
相關問題