gpt4 book ai didi

swift - 无法使 Realm List 符合 NSCopying

转载 作者:行者123 更新时间:2023-11-28 06:35:47 36 4
gpt4 key购买 nike

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

  1. @objc 在泛型类的扩展中不受支持。
  2. 我无法继承 List,因为它是最终类。
  3. 如果我实现“public func copy(with zone: NSZone? = nil) -> Any”而不标记符合 NSCopying。我只是收到错误消息:“...copyWithZone:]: 无法识别的选择器发送到实例”

所以虽然List 中有copy(),但我们永远无法真正使用它。

当前,我必须使用迭代在 List< T > 之外进行复制。我不能简单地使用 instanceOfList.copy()。

最佳答案

没必要制作List<T>符合 NSCopying为了用复制成员函数扩展它,除非你试图在 Objective-C 的通用上下文中复制它。 NSCopying是一种遗留协议(protocol),在纯 Swift 中使用没有多大意义。它是类绑定(bind)的,没有很好的类型签名。

如果您尝试使用 NSCopying在纯 Swift 的通用上下文中,考虑定义您自己的 Copyable协议(protocol)和扩展类型以符合该协议(protocol)。因为它不是 @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 .

关于swift - 无法使 Realm List<T> 符合 NSCopying,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39124294/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com