我决定学习Swift,我决定立即开始使用Swift 2.
所以这是一个非常基本的例子,类似于Apple自己的关于Swift的电子书中的一个例子
let greeting = "Guten Tag"
for index in indices(greeting) {
print(greeting[index])
}
我在Xcode 7的操场上尝试了这个,我收到了以下错误
无法使用类型为'(String)'
的参数列表调用'indices'
我也尝试过与Xcode 6(Swift 1.2 AFAIK)相同的东西,它按预期工作。
现在,我的问题是:
另外:如果答案是“2”,你将如何替换Swift 2中的indices(String)
?
答案 0 :(得分:8)
在游乐场,如果你进入菜单View>调试区域>显示调试区域,您可以在控制台中看到完整错误:
/ var / folders / 2q / 1tmskxd92m94__097w5kgxbr0000gn / T /./ lldb / 94138 / playground29.swift:5:14:错误:'指数'不可用:访问'指数'集合上的财产 索引中的索引(问候语)
此外,String
不再符合SequenceType
s,但您可以通过调用characters
来访问其元素。
所以Swift 2的解决方案就是这样做:
let greeting = "Guten Tag"
for index in greeting.characters.indices {
print(greeting[index])
}
结果:
ü
Ť
Ë
nŤ
一个
g
当然,我认为您的示例只是为了测试indices
,否则您可以这样做:
for letter in greeting.characters {
print(letter)
}
答案 1 :(得分:1)
为了完成,我找到了一种非常简单的方法来从字符串中获取字符和子字符串(这不是我的代码,但我不记得从哪里得到它):< / p>
在项目中包含此String扩展名:
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"
答案 2 :(得分:-1)
以下是您要查找的代码:
var middleName :String? = "some thing"
for index in (middleName?.characters.indices)! {
// do some thing with index
}