gpt4 book ai didi

swift - 添加 Swift 标准库中未实现的 SequenceType

转载 作者:行者123 更新时间:2023-11-30 10:14:14 24 4
gpt4 key购买 nike

在 Swift 标准库中,+ 运算符仅重载于 ExtensibleCollectionType 和另一种绝对符合 SequenceType 的类型:

func + <C : ExtensibleCollectionType, S : CollectionType where S.Generator.Element == C.Generator.Element>(lhs: C, rhs: S) -> C
func + <C : ExtensibleCollectionType, S : SequenceType where S.Generator.Element == C.Generator.Element>(lhs: C, rhs: S) -> C
func + <C : ExtensibleCollectionType, S : SequenceType where S.Generator.Element == C.Generator.Element>(lhs: S, rhs: C) -> C
func + <EC1 : ExtensibleCollectionType, EC2 : ExtensibleCollectionType where EC1.Generator.Element == EC2.Generator.Element>(lhs: EC1, rhs: EC2) -> EC1

那么为什么他们不使用 SequenceTypes 或至少 CollectionTypes 来重载它,因为它们可以轻松地添加为 Array 呢?:

func + <S1: SequenceType, S2: SequenceType where S1.Generator.Element == S2.Generator.Element>(s1: S1, s2: S2) -> [S1.Generator.Element] {
return Array(s1) + Array(s2)
}

不实现这种重载有什么好处吗?

最佳答案

但这总是会将您的集合转换为可能不符合预期的数组。

通过将 lhs 限制为可扩展集合类型,可以使用相同的类型作为返回值。这样,就不会隐式发生转换,并且可以更有效地实现加法。

如果您不关心转换为数组,则始终可以显式执行此操作:Array(lhs) + rhs

关于swift - 添加 Swift 标准库中未实现的 SequenceType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31140092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com