无法使领域列表 <T> 符合 NSCopying
Can't make realm List<T> conform NSCopying
我正在尝试使 List< T > 符合 NSCopying。我不能因为:
- @objc 在通用 classes 的扩展中不受支持。
- 我无法继承 List,因为它是最终的 class。
- 如果我实施 "public func copy(with zone: NSZone? = nil) -> Any" 而不标记符合 NSCopying。我只是收到错误消息:“...copyWithZone:]: 无法识别的选择器已发送到实例”
所以虽然List中有copy(),但我们永远无法真正使用它
目前我必须使用迭代在 List< T > 之外进行复制。我不能简单地使用 instanceOfList.copy().
没有必要使 List<T>
符合 NSCopying
以使用复制成员函数扩展它,除非您试图在 Objective-C 的通用上下文中复制它. NSCopying
是一个遗留协议,在纯 Swift 中使用没有多大意义。它是 class-bound 并且没有很好的类型签名。
如果您尝试在纯 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
我正在尝试使 List< T > 符合 NSCopying。我不能因为:
- @objc 在通用 classes 的扩展中不受支持。
- 我无法继承 List,因为它是最终的 class。
- 如果我实施 "public func copy(with zone: NSZone? = nil) -> Any" 而不标记符合 NSCopying。我只是收到错误消息:“...copyWithZone:]: 无法识别的选择器已发送到实例”
所以虽然List
目前我必须使用迭代在 List< T > 之外进行复制。我不能简单地使用 instanceOfList.copy().
没有必要使 List<T>
符合 NSCopying
以使用复制成员函数扩展它,除非您试图在 Objective-C 的通用上下文中复制它. NSCopying
是一个遗留协议,在纯 Swift 中使用没有多大意义。它是 class-bound 并且没有很好的类型签名。
如果您尝试在纯 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