gpt4 book ai didi

swift - String.endIndex递增错误

转载 作者:行者123 更新时间:2023-11-28 10:18:13 24 4
gpt4 key购买 nike

我有这样一个案例:

var fieldName = "VERSION"
var versionField = "VERSION:4.1"

var version = versionField.substringFromIndex(fieldName.endIndex.successor())

最后一行生成运行时错误“ fatal error :无法增加 endIndex”。发生这种情况是因为 swift 不知道最大索引之后的下一个索引是什么。看起来此解决方案仅适用于 swift 1.*。但是对于新的swift版本,有没有什么办法可以简洁的解决这个问题呢?
感谢您的回答。

最佳答案

有两个问题:

  • fieldName.endIndex 是字符串的“最后一个”位置,它没有继任者。
  • 不得使用一个字符串的索引作为下标一个不同的字符串。这可能在某些情况下有效,但可以如果字符串包含,则崩溃并出现运行时异常“基本多语言平面”之外的字符(表情符号、旗帜……)。

工作变体是 (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")
}

或者:

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

是否应在字符串中的任何位置找到该字段。

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")
}

或者,

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")
}

关于swift - String.endIndex递增错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38813676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com