Swift 2 中的字符串索引

Posted

技术标签:

【中文标题】Swift 2 中的字符串索引【英文标题】:String indices in Swift 2 【发布时间】:2015-06-11 10:32:04 【问题描述】:

我决定学习 Swift,并决定立即开始使用 Swift 2。

所以这是一个非常基本的示例,类似于 Apple 自己的电子书中关于 Swift 的示例之一

let greeting = "Guten Tag"

for index in indices(greeting) 
    print(greeting[index])

我在 Xcode 7 的操场上试过这个,我收到以下错误

无法使用“(字符串)”类型的参数列表调用“索引”

我也用 Xcode 6(即 Swift 1.2 AFAIK)尝试了同样的事情,它按预期工作。

现在,我的问题是:这是

    Xcode 7 中的一个错误,它毕竟还是一个测试版,或者 在 Swift 2 中不再适用并且电子书还没有完全更新的东西?

另外:如果答案是“2”,你会如何在 Swift 2 中替换 indices(String)

【问题讨论】:

【参考方案1】:

在 Playground 中,如果您转到菜单 View > Debug Area > Show debug area,您可以在控制台中看到完整的错误:

/var/folders/2q/1tmskxd92m94__097w5kgxbr0000gn/T/./lldb/94138/playground29.swift:5:14:错误:“索引”不可用:访问集合上的“索引”属性 索引中的索引(问候)

另外,Strings 不再符合 SequenceTypes,但您可以通过调用 characters 来访问它们的元素。

所以 Swift 2 的解决方案是这样做:

let greeting = "Guten Tag"

for index in greeting.characters.indices 
    print(greeting[index])

结果:

G u t 电子 n

T 一个 克

当然,我假设您的示例只是为了测试indices,否则您可以这样做:

for letter in greeting.characters 
    print(letter)

【讨论】:

谢谢。是的,我只是在测试indices,并且已经知道更简单的解决方案,因为本书前面提到了characters。您对调试控制台的提示也很有帮助。 不客气。确实,我确实对添加最后一条评论犹豫不决,因为我很确定您知道这一点。 :) 但我最终添加了它,因为我认为它可以帮助未来的读者确定帖子的主题是indices,而不是实际访问字符。【参考方案2】:

为了补全,我找到了一种非常简单的方法来从字符串中获取字符和子字符串(这不是我的代码,但我不记得我从哪里得到的)

在您的项目中包含此字符串扩展:

extension String 

    subscript (i: Int) -> Character 
        return self[self.startIndex.advancedBy(i)]
    

    subscript (i: Int) -> String 
        return String(self[i] as Character)
    

    subscript (r: Range<Int>) -> String 
        return substringWithRange(Range(start: startIndex.advancedBy(r.startIndex), end: startIndex.advancedBy(r.endIndex)))
    

这将使您能够做到:

print("myTest"[3]) //the result is "e"
print("myTest"[1...3]) //the result is "yTe"

【讨论】:

【参考方案3】:

这是您正在查看的代码:

var middleName :String? = "some thing"
for index in (middleName?.characters.indices)! 
// do some thing with index

【讨论】:

以上是关于Swift 2 中的字符串索引的主要内容,如果未能解决你的问题,请参考以下文章

Swift 2 字符串数组删除特定索引错误

索引超出范围数据 nil swift 3

swift swift中字符的简单索引表

Swift 3 - 如何从包含字符串的索引中读取 json 输出

在 Swift 的嵌套循环中从特定索引枚举字符串

循环遍历数组以获取项目的索引 - swift