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:错误:“索引”不可用:访问集合上的“索引”属性 索引中的索引(问候)
另外,String
s 不再符合 SequenceType
s,但您可以通过调用 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 中的字符串索引的主要内容,如果未能解决你的问题,请参考以下文章