Es gibt zwei Probleme:
fieldName.endIndex
ist das „eine über das Ende“ Position der Zeichenfolge, es keinen Nachfolger hat.
- Sie dürfen den Index einer Zeichenfolge nicht als Index für eine andere Zeichenfolge verwenden. Das kann in einigen Fällen funktionieren, aber kann mit einer Laufzeitausnahme abstürzen, wenn die Zeichenfolgen Zeichen außerhalb der "grundlegenden mehrsprachigen Ebene" enthalten (Emojis, Flags, ...).
Eine Arbeits Variante wäre (Swift 2.2):
let fieldName = "VERSION:"
let versionField = "VERSION:4.1"
if versionField.hasPrefix(fieldName) {
let version = versionField.substringFromIndex(
versionField.startIndex.advancedBy(fieldName.characters.count))
print(version) // 4.1
} else {
print("No version found")
}
oder alternativ:
if let range = versionField.rangeOfString(fieldName)
where range.startIndex == versionField.startIndex {
let version = versionField.substringFromIndex(range.endIndex)
print(version) // 4.1
} else {
print("No version found")
}
Sie die Einschränkung entfernen
where range.startIndex == versionField.startIndex
wenn das Feld sollte irgendwo gefunden werden e in der Zeichenfolge.
Swift 3:
if versionField.hasPrefix(fieldName) {
let version = versionField.substring(
from: versionField.index(versionField.startIndex, offsetBy: fieldName.characters.count))
print(version) // 4.1
} else {
print("No version found")
}
oder alternativ
if let range = versionField.range(of: fieldName),
range.lowerBound == versionField.startIndex {
let version = versionField.substring(from: range.upperBound)
print(version) // 4.1
} else {
print("No version found")
}
Beachten Sie, dass OP hat '" fieldname = "VERSION" 'nicht' fieldname = "VERSION:" 'also denke ich, es sollte 'let version = versionFieldsubstringFromIndex (range.endIndex.advancedBy (1))' right? – Moritz
@EricAya: Ich habe das geändert, um den Code zu vereinfachen. 'range.endIndex.advancedBy (1)' könnte hinter dem sein Ende von 'versionField', also müssten Sie das zuerst überprüfen Ich werde nicht überprüfen, dass auf das Versionsfeld ein Doppelpunkt folgt. –