二つの問題があります。
fieldName.endIndex
は、それが何の後継者を持っていない文字列の「一端過去」の位置、 です。
- の添字に1つの文字列のインデックスを使用しないでください。文字列に "基本多言語面"(Emojis、flags、...)の外に 文字が含まれていると、がになることがありますが、 は実行時例外でクラッシュする可能性があります。
ワーキング・バリアントは、(スウィフト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")
}
または代わり:
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")
}
あなたは、フィールド場合、制約
where range.startIndex == versionField.startIndex
を削除することができますanywherを見つける必要があります文字列のe。
スウィフト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")
}
または代替的に、OPは `"フィールド名= "VERSION" `しない`フィールド名= "バージョンを持っていること
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")
}
注:" 'ので、私はそれを推測します – Moritz
@EricAya:コードを簡素化するために変更しました。「range.endIndex.advancedBy(1)」は、 'versionField'の終わりですので、最初にチェックしなければなりません。バージョンフィールドにコロンが続くことを確認しないでください。 –