2016-10-26 86 views
2

爲什麼它不適用於Swift 3?如何轉換它?Swift 3 - inout字符串不能轉換爲字符串

var valorTemp: String = "44,52" 
valorTemp = valorTemp.substring(with: Range<String.Index>(valorTemp.startIndex...valorTemp.characters.index(valorTemp.endIndex, offsetBy: -2))) 

當我改變...到... <它工作正常,但我不認爲其結果可能是一樣的

var valorTemp: String = "44,52" 
valorTemp = valorTemp.substring(with: Range<String.Index>(valorTemp.startIndex..<valorTemp.characters.index(valorTemp.endIndex, offsetBy: -2))) 

謝謝!

+0

PS:第一個代碼在Xcode 8中顯示錯誤「inout String不能轉換爲字符串」 –

回答

2

在Swift 3中,兩個範圍運算符.....<返回兩種不同的類型。當應用於String.Index,ClosedRange<String.Index>Range<String.Index>時。

而且substring(with:)只爲Range<String.Index>定義的,您不能轉換到ClosedRange<String.Index>Range<String.Index>的初始化程序語法。

您可以明確使用..<嘗試(只需要修改下界):

valorTemp = valorTemp.substring(with: valorTemp.startIndex..<valorTemp.characters.index(valorTemp.endIndex, offsetBy: -1)) 

否則,下標爲String有一些重載既包括對Range<String.Index>ClosedRange<String.Index>

valorTemp = valorTemp[valorTemp.startIndex...valorTemp.characters.index(valorTemp.endIndex, offsetBy: -2)] 

在你的情況下使用substring(to:)將是一個很好的選擇(需要使用「修改」索引):

valorTemp = valorTemp.substring(to: valorTemp.characters.index(valorTemp.endIndex, offsetBy: -1))