gpt4 book ai didi

swift - 生成相同类型类的 SequenceType 数组的类型是什么

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

我有一堆非常不同的类,除了它们都能够返回 MyProtocol 类型的对象。

所以对于我的每一个类

extension MyClass : SequenceType {
func generate() -> GeneratorOf<MyProtocol> {
var index = -1;
return GeneratorOf< MyProtocol > {
index += 1
return index < self.values.count
? self.values[index]
: nil
}
}
}

我想将此类类的集合传递给可以执行此操作的函数

func printAll (containers : ????) {
for container : containers {
for myProtocolValue : container {
print (myProtocolValue.myProtocolFunc())
}
}
}

容器有什么类型?

最佳答案

最好的解决方案是制定一个新的协议(protocol)。您的所有类都符合它,并且它没有 self 要求才能使用异构数组:

protocol MyProtocolContainer {
func generate() -> GeneratorOf<MyProtocol>
}

// the implementation of the generate function stays the same but you conform to MyProtocolContainer

extension MyClass : SequenceType, MyProtocolContainer { ... }

// the printAll function has the following implementation
func printAll (containers : [MyProtocolContainer]) {
for container in containers {
// you have to call generate manually since MyProtocolContainer is no SequenceType
// in order to be used in a heterogenous collection
for myProtocolValue in container.generate() {
print (myProtocolValue.myProtocolFunc())
}
}
}

旁注:

在 Swift 中,没有 for ... : ... 循环,: 应该是 in

为了使生成函数的实现更容易,我建议使用Array本身的Generator:

class MyClass: MyProtocolReturnable, SequenceType {
func generate() -> GeneratorOf<MyProtocol> {
return GeneratorOf(self.values.map{ $0 as MyProtocol }.generate())
// if the array is of type [MyProtocol] you can also use
return GeneratorOf(self.values.generate())
}
}

关于swift - 生成相同类型类的 SequenceType 数组的类型是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32084092/

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