Swift 3:如何进行字符串范围?

时间:2017-01-24 18:48:36

标签: swift

昨晚我不得不将我的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

错误位于range中的参数val.rage,说否' ...'候选人产生预期的上下文结果类型'范围?'

我尝试使用Range(startRange...endRange)作为文档中的建议,但我收到错误说: connot connot为类型ClosedRange< _>调用initiliazer使用类型的争论列表(ClosedRange)。好像我错过了一些基本的东西。

感谢任何帮助。 谢谢!

1 个答案:

答案 0 :(得分:0)

简单回答:您缺少的基本要素是封闭范围现在与范围不同。因此,请将```{r cache=FALSE,fig.cap="Fig 1c. Day of Week Effect on Ratio for India",fig.width=9,figh.height=6, fig.align='center'} f=dau[geo=="IN" & date<"2017-01-01", ] invisible(monthplot(ts(f$r,frequency=7,start=c(26,5)),labels=c("m","t","w","th","fr","sa","su"),ylab='ratio' )) ``` 更改为startRange...endRange

更详细地说,这是您的代码的缩写版本(没有startRange..<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