我正在尝试制作List< T>符合NSCopying。我不能因为:
所以尽管List<中有copy() T&gt ;,我们永远不会真正使用它。
目前我必须在List<之外复制。 T>,使用迭代。我不能简单地使用instanceOfList.copy()。
答案 0 :(得分:1)
除非您尝试在Objective-C的通用上下文中复制它,否则不必使List<T>
符合NSCopying
以使用复制成员函数进行扩展。 NSCopying
是一种遗留协议,在纯Swift中使用时没有多大意义。它是类绑定的,没有非常好的类型签名。
如果您尝试在纯Swift的通用上下文中使用NSCopying
,请考虑定义自己的Copyable
协议并扩展类型以符合该协议。由于它不是@objc
,你应该没问题。已符合NSCopying
的现有类型将要求扩展也符合Copyable
,但您可以将逻辑放在NSCopying
的扩展名中。
import Foundation
protocol Copyable {
mutating func copy() -> Self
}
extension NSCopying {
func copy() -> Self {
return copy(with: nil) as! Self
}
}
extension MyTypeThatConformsToNSCopying: Copyable { }
现在,我有点好奇你为什么试图将List<T>
与NSCopying
相符合。您在寻找列表的非托管副本吗?您可以使用Array(myList)
从Array
获取List
。