无法使领域列表 <T> 符合 NSCopying

Can't make realm List<T> conform NSCopying

我正在尝试使 List< T > 符合 NSCopying。我不能因为:

  1. @objc 在通用 classes 的扩展中不受支持。
  2. 我无法继承 List,因为它是最终的 class。
  3. 如果我实施 "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