我有一个切片功能,我在这里。我想知道如何修改它,以便在to
找不到字符串的情况下找到from
返回的整个字符串的结尾索引(.count-1
)。现在,如果我打电话.slice
并且没有to
找到字符串,显然很崩溃。
extension String {
func slice(from: String, to: String) -> String? {
return (range(of: from)?.upperBound).flatMap { substringFrom in
(range(of: to, range: substringFrom..<endIndex)?.lowerBound).map { substringTo in
String(self[substringFrom..<substringTo])
}
}
}
}
这是一种可能的解决方案:
extension String {
func slice(from: String, to: String) -> String? {
if let fromRng = range(of: from) {
if let toRng = range(of: to, range: fromRng.upperBound..<endIndex) {
// "from" and "to" found, get parts between
return String(self[fromRng.upperBound..<toRng.lowerBound])
} else {
// "to" not found, return everything after "from"
return String(self[fromRng.upperBound...])
}
} else {
// "from" not found
return nil
}
}
}
它不像原始版本那样“花哨”,但我个人认为逻辑更容易阅读。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句