昨晚我不得不将我的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)。好像我错过了一些基本的东西。
感谢任何帮助。 谢谢!
答案 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