我想学习最好/最简单的方法,将一个字符串转换为另一个字符串,但只有一个子集,从一个字符的开头到最后一个索引。
例如,将。什么样的代码片段会做到这一点,并且最快捷?(我希望这不会引起争论,但是我找不到关于如何在Swift中处理子字符串的好课程。
最好的方法是substringToIndex结合使用endIndex属性和advance全局功能。
substringToIndex
endIndex
advance
var string1 = "www.stackoverflow.com" var index1 = advance(string1.endIndex, -4) var substring1 = string1.substringToIndex(index1)
使用rangeOfString并设置options为.BackwardsSearch
rangeOfString
options
.BackwardsSearch
var string2 = "www.stackoverflow.com" var index2 = string2.rangeOfString(".", options: .BackwardsSearch)?.startIndex var substring2 = string2.substringToIndex(index2!)
没有扩展,纯真的Swift
advance现在是的一部分,Index称为advancedBy。您这样做:
Index
advancedBy
var string1 = "www.stackoverflow.com" var index1 = string1.endIndex.advancedBy(-4) var substring1 = string1.substringToIndex(index1)
您无法调用advancedBya,String因为它具有可变大小的元素。您必须使用index(_, offsetBy:)。
String
index(_, offsetBy:)
var string1 = "www.stackoverflow.com" var index1 = string1.index(string1.endIndex, offsetBy: -4) var substring1 = string1.substring(to: index1)
许多事情已经重命名。这些案件都写在驼峰,startIndex成了lowerBound。
startIndex
lowerBound
var string2 = "www.stackoverflow.com" var index2 = string2.range(of: ".", options: .backwards)?.lowerBound var substring2 = string2.substring(to: index2!)
另外,我不建议强制展开index2。您可以使用可选的绑定或map。就个人而言,我更喜欢使用map:
index2
map
var substring3 = index2.map(string2.substring(to:))
Swift 3版本仍然有效,但是现在您可以使用带有索引范围的下标:
let string1 = "www.stackoverflow.com" let index1 = string1.index(string1.endIndex, offsetBy: -4) let substring1 = string1[..<index1]
第二种方法保持不变:
let string2 = "www.stackoverflow.com" let index2 = string2.range(of: ".", options: .backwards)?.lowerBound let substring3 = index2.map(string2.substring(to:))