我只想一劳永逸地解决这个问题:
在斯威夫特。可以将字符串数据类型视为序列,例如数组和元组吗?
func printAnySequence<T: SequenceType>(anything: T) {
for element in anything {
print("\(element),")
}
}
printAnySequence("A random string")
上面的代码生成了一个编译器错误消息:&#34;无法调用printAnySequence&#34;使用string类型的参数列表。
let randomString: String = "A random string"
for char in randomString {
print(char)
}
上面的代码生成编译器错误消息:&#34; Type&#39; String&#39;不符合协议&#39; SequenceType&#39;&#34;
然而,Swift的文档明确指出字符串是固定的字符序列。
我的错误在哪里?
由于 谢谢谢谢
答案 0 :(得分:1)
不,String
未实施SequenceType
。文档将字符串文字称为“固定的文本字符序列”,但这与SequenceType
协议没有任何关系。但是,String.characters
的类型为String.CharacterView
实现SequenceType
(它甚至实现BidirectionalCollectionType
)。
如果您真的想要,可以让String
非常轻松地符合BidirectionalCollectionType
(以及RangeReplaceableCollectionType
):
extension String: BidirectionalCollectionType, RangeReplaceableCollectionType {
// String already implements the necessary methods
// and properties, so we can leave this empty
}
但是,不建议这样做。 Swift团队核心遗漏了这些一致性的原因是:SequenceType
,CollectionType
和其他协议的协议扩展方法可能会对String
可能不适用的序列/集合做出假设,由于Swift字符串的性质。