gpt4 book ai didi

swift 3 : How to do string ranges?

转载 作者:行者123 更新时间:2023-11-28 08:18:48 25 4
gpt4 key购买 nike

昨晚我不得不将我的 Swift 2.3 代码转换为 Swift 3.0,转换后我的代码一团糟。在 Swift 2.3 中,我有以下代码:

let maxChar = 40;
let val = "some long string";
var startRange = val.startIndex;
var endRange = val.startIndex.advancedBy(maxChar, limit: val.endIndex);
let index = val.rangeOfString(" ", options: NSStringCompareOptions.BackwardsSearch , range: startRange...endRange , locale: nil)?.startIndex;

Xcode 将我的代码转换为这个不起作用:

let maxChar = 40;
let val = "some long string";
var startRange = val.startIndex;
var endRange = val.characters.index(val.startIndex, offsetBy: maxChar, limitedBy: val.endIndex);
let index = val.range(of: " ", options: NSString.CompareOptions.backwards , range: startRange...endRange , locale: nil)?.lowerBound

错误在 val.rage 中的参数 range 中,说 No '...' candidates produce the expected contextual result type 'Range?'

我尝试按照文档中的建议使用 Range(startRange...endRange) 但我收到错误消息:connot invoke initiliazer for type ClosedRange<_> with an argument类型列表 (ClosedRange)。好像我缺少一些基本的东西。

感谢任何帮助。谢谢!

最佳答案

简单的答案:您缺少的基本要素是封闭范围现在不同于范围。所以,改变startRange...endRangestartRange..<endRange .

更详细地说,这是您的代码的缩写版本(没有 maxChar 部分):

let val = "some long string";
var startRange = val.startIndex;
var endRange = val.endIndex;
let index = val.range(
of: " ", options: .backwards, range: startRange..<endRange)?.lowerBound
// 9

现在您可以以此为基础来恢复您实际需要的功能。


但是,如果您只想拆分字符串,那么重新发明轮子就有点傻了:

let arr = "hey ho ha".characters.split(separator:" ").map{String($0)}
arr // ["hey", "ho", "ha"]

关于 swift 3 : How to do string ranges?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41836686/

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