Swift - 字符串:序列与否?

时间:2016-07-03 14:49:57

标签: swift string sequence

我只想一劳永逸地解决这个问题:

在斯威夫特。可以将字符串数据类型视为序列,例如数组和元组吗?

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的文档明确指出字符串是固定的字符序列。

enter image description here

我的错误在哪里?

由于 谢谢谢谢

1 个答案:

答案 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团队核心遗漏了这些一致性的原因是:SequenceTypeCollectionType和其他协议的协议扩展方法可能会对String可能不适用的序列/集合做出假设,由于Swift字符串的性质。