Swift String removeSubrange - 防止索引错误

问题描述 投票:-1回答:1

对于特定的代码部分,我有:

if let endIndex = lineEndIndex {
    buffer.removeSubrange(buffer.startIndex ..< endIndex)
}

不幸的是,我看到以下错误 - 致命错误:replaceSubrange:子范围扩展到字符串结束

所以,我需要用这样的方法来防范这种情况:

if (buffer.endIndex < lineEndIndex!) {
    lineEndIndex = buffer.endIndex
}

if let endIndex = lineEndIndex {
    buffer.removeSubrange(buffer.startIndex ..< endIndex)
}

然而,这似乎有点'kludgy'。是否有更优雅的方法来防止尝试使用removeSubrange函数超出字符串的长度?

更新:

基于Leo关于使用min函数的第二个建议,我的代码块看起来像这样:

// unwrap lineEndIndex
if let endIndex = lineEndIndex {
    // use the smaller of two values, buffer length or endIndex
    let endIndexVal = min(buffer.endIndex, endIndex)

    buffer.removeSubrange(buffer.startIndex ..< endIndexVal)
}
swift string
1个回答
1
投票

用这个:

buffer.removeSubrange(buffer.startIndex ..< min(endIndex, buffer.endIndex))

这将使用lineEndIndex和buffer.endIndex的较低值,因此如果你的endIndex超出了字符串的末尾,则可以防止错误。

© www.soinside.com 2019 - 2024. All rights reserved.