Swift中的"advance"关键字是什么?

3
let word = "sample string"

let firstLetter = Character(word.substringToIndex(advance(word.startIndex,1)).uppercaseString)

我从教程中得到了上述示例。有谁知道他们所说的"advance"是什么,以及"substringToIndex"和"substringWithRange"之间有什么区别。
3个回答

6

这个 advance 语法来自 Swift 1,现在已经不同了。

Swift 2

let firstLetter = Character(word.substringToIndex(word.startIndex.advancedBy(1)).uppercaseString)

advancedBy 方法可以将当前索引向前移动。

使用 substringToIndex 可以切割一个从字符串开始到 advancedBy 指定的索引位置结束的部分字符串。

在此处,你向前移动了 1 个字符,这意味着 substringToIndex 将获取字符串的第一个字符。

Swift 3

语法又一次发生了变化,我们现在使用 substring 和带有偏移量的 index

let firstLetter = Character(word.substring(to: word.index(word.startIndex, offsetBy: 1)).uppercased())

1
你的教程已经过时了。在Swift 2中,advance已被弃用。在Swift中,字符串不能随意访问,即没有word[0]来获取字符串的第一个字母。相反,您需要使用Index对象来指定字符的位置。您可以通过从另一个索引开始(通常是字符串的startIndexendIndex),然后将其推进到需要的字符来创建该索引:
let word   = "sample string"
let index0 = word.startIndex                // the first letter, an 's'
let index6 = word.startIndex.advancedBy(6)  // the seventh letter, the whitespace

substringToIndex 取字符串左侧的所有字符,停止在您指定的索引之前。这两个是等价的:

print("'\(word.substringToIndex(index6))'")
print("'\(word[index0..<index6])'")

同时打印 'sample'


1

substringToIndex

返回一个新的字符串,该字符串包含接收器中直到给定索引但不包括该索引处字符的所有字符。

返回值一个新的字符串,该字符串包含接收器中直到给定索引但不包括该索引处字符的所有字符。如果anIndex等于字符串的长度,则返回接收器的副本。

substringWithRange

返回一个字符串对象,该对象包含接收器中位于给定范围内的字符。

返回值一个字符串对象,该对象包含接收器中位于aRange范围内的字符。

特别注意此方法检测所有无效范围(包括负长度)。对于链接到OS X v10.6及更高版本的应用程序,此错误会导致异常;对于链接到早期版本的应用程序,此错误会导致警告,每个应用程序执行仅显示一次。

如需更详细的信息,请查看Apple NSString类参考文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接