无法使域列表<t>符合NSCopying

时间:2016-08-24 13:10:30

标签: swift list realm nscopying

我正在尝试制作List&lt; T>符合NSCopying。我不能因为:

  1. 泛型类的扩展中不支持@objc。
  2. 我不能继承List,因为它是最后一堂课。
  3. 如果我实现“public func copy(带区域:NSZone?= nil) - &gt;任何”没有标记符合NSCopying。我只是得到错误:“... copyWithZone:]:无法识别的选择器发送到实例”
  4. 所以尽管List&lt;中有copy() T&gt ;,我们永远不会真正使用它。

    目前我必须在List&lt;之外复制。 T>,使用迭代。我不能简单地使用instanceOfList.copy()。

1 个答案:

答案 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