2016-10-26 6 views
2

Warum funktioniert es nicht in Swift 3? Wie konvertiert man es?Swift 3 - Inout String ist nicht in String konvertierbar

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

Wenn ich ändern ... zu .. < es funktioniert gut, aber ich glaube nicht, dass das Ergebnis das gleiche sein könnte

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

Thank you!

+0

PS: Der erste Code zeigt mir den Fehler "Inout String ist nicht in String umwandelbar" in Xcode 8 –

Antwort

2

In Swift 3 gibt zwei Bereichsoperatoren ... und ..< zwei verschiedene Typen zurück. Bei Anwendung auf String.Index, ClosedRange<String.Index> und Range<String.Index>.

Und substring(with:) ist nur für Range<String.Index> definiert und Sie können ClosedRange<String.Index> nicht in Range<String.Index> mit einer Initialisierungssyntax konvertieren.

Sie mit explizit mit ..< versuchen können (müssen nur die untere Grenze ändern):

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

Oder aber, der Index für String hat einige Überlastungen, die sowohl für Range<String.Index> und ClosedRange<String.Index>:

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

In Ihrem Fall mit substring(to:) wäre eine gute Alternative (müssen Sie den "modifizierten" Index verwenden):

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