【发布时间】:2020-12-16 00:34:56
【问题描述】:
extension Array {
init?<S: Sequence>(_ sequence: S?) where S.Element == Element {
guard let sequence = sequence else { return nil }
self.init(sequence)
}
}
extension Set {
init?<S: Sequence>(_ sequence: S?) where S.Element == Element {
guard let sequence = sequence else { return nil }
self.init(sequence)
}
}
如您所见,两个扩展中的代码完全相同。那么如何在不重复的情况下重写它呢?比如:
extension Collection where type == Array || type == Set {
init?<S: Sequence>(_ sequence: S?) where S.Element == Element {
guard let sequence = sequence else { return nil }
self.init(sequence)
}
}
【问题讨论】:
-
@Sweeper 好的,该怎么做?
-
其实我们不需要这样的初始化器。代码:sequence.map(Array.init) 效果一样。
-
是的,但我还是更喜欢初始化程序。只是看起来“更直接”:-)
标签: arrays swift collections set