我正在努力使List< T>符合NSCopying.我不能因为:
因此,尽管List< T >中有copy(),但我们永远无法真正使用它。
当前,我必须在List< T >之外复制,使用迭代。我不能简单地使用instanceOfList.copy()。
发布于 2016-08-29 17:30:35
没有必要使List<T>与NSCopying相一致才能使用复制成员函数来扩展它,除非您试图从Objective在泛型上下文中复制它。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)从List中获取一个Array。
https://stackoverflow.com/questions/39124294
复制相似问题