更新 substring(to:) 导致无法推断通用参数
Posted
技术标签:
【中文标题】更新 substring(to:) 导致无法推断通用参数【英文标题】:updating substring(to:) results in generic parameter could not be inferred 【发布时间】:2017-11-07 02:27:07 【问题描述】:我正在使用一个使用 substring(to:)
的框架,该框架现已在 swift 4 中被弃用。
let split = stripped.substring(to: stripped.range(of: ";")?.lowerBound ?? stripped.endIndex)
我将其更新为下面的代码,但现在我收到“无法推断通用参数”错误,并且“..”带有下划线。
let split = stripped[..<stripped.range(of: ";")?.lowerBound ?? stripped.endIndex]
不知道我应该如何解决这个问题。
【问题讨论】:
let split = stripped[..<(stripped.range(of: ";")?.lowerBound ?? stripped.endIndex)]
只需在你的上界添加一个括号
【参考方案1】:
让我们把这段代码更清楚一点:
let range = stripped.range(of: ";")?.lowerBound ?? stripped.endIndex
let split = String(stripped[..<range])
但您似乎想在某个字符之前获取子字符串。我有另一种方法:
let split: String = stripped.components(separatedBy: ";").first!
【讨论】:
谢谢!这不是我自己编写的代码,我很难理解发生了什么。你能解释一下吗? 如果没有“;”,则获取从开始到分隔符“;”的子字符串在字符串中,取而代之的是整个字符串(从开始到结束索引)【参考方案2】:编译器无法推断您的范围隐式从stripped
的startIndex
开始。您必须明确指定范围的开头:
let split = stripped[stripped.startIndex..<(stripped.range(of: ";")?.lowerBound ?? stripped.endIndex)]
实际上,这很难阅读,所以考虑编写一点更简洁的代码:
let endIndex = stripped.range(of: ";")?.lowerBound ?? stripped.endIndex
let split = stripped[stripped.startIndex..<endIndex]
【讨论】:
以上是关于更新 substring(to:) 导致无法推断通用参数的主要内容,如果未能解决你的问题,请参考以下文章
jpa缓存导致无法查询到更新后的数据&android出现ANR的一个解决办法
更新浏览器,导致编写脚本报错Message: Unable to find a matching set of capabilities
Swift 4:'substring(to:)' 已弃用 [重复]