也許這是一個Xcode 8測試版的問題,但是,之前2.2 var
關鍵字可以在函數簽名前面加上參數:如何用Swift> 2.2在閉包中表示可變參數?
func (var stringName: String) { ... }
這已經被超過inout
棄用代替那裏是沒有什麼好處
func (stringName: inout String) { ... }
我已經嘗試在map
封閉以下,雖然我沒有收到折舊警告爲輕度預期我應該,錯誤是個相當segmentation fault: 11
let demoString = ["hi", "there", "world"].map { (var word) -> String in
let firstChar = word.remove(at: word.startIndex)
}
只要我試圖突變(假設可變)word
變量,就會報錯。
我試過其他的變化例如使用inout
let demoString = ["hi", "there", "world"].map { (word: inout String) -> String in
let firstChar = word.remove(at: word.startIndex)
}
但是編譯器會抱怨,這錯誤地改變了封閉的完全的簽名,將無法編譯。
顯然,解決辦法很簡單,就是封閉內變量複製到本地一個:
let demoString = ["hi", "there", "world"].map { (word) -> String in
let tempWord = word
let firstChar = tempWord.remove(at: tempWord.startIndex)
}
不過,我想知道,如果這種預期的功能&是否存在的一種方式突變直接傳遞給閉包的參數?
貴的問題得到解答? – Alexander