2016-10-26 20 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:最初のコードは、「inout StringはXcode 8の文字列に変換できません」というエラーを表示します –

答えて

2

スウィフト3では、2つの範囲演算子.....<が2つの異なる型を返します。適用される場合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:)を使用している場合は、「変更済み」インデックスを使用する必要があります。

関連する問題