首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使领域List<T>符合NSCopying

无法使领域List<T>符合NSCopying
EN

Stack Overflow用户
提问于 2016-08-24 13:10:29
回答 1查看 281关注 0票数 1

我正在努力使List< T>符合NSCopying.我不能因为:

  1. 泛型类的扩展不支持@objc。
  2. 我不能继承列表,因为它是最后一堂课。
  3. 如果我实现"public副本(带zone: NSZone?= nil) -> Any“而没有标记为符合NSCopying。我只得到错误:“...copyWithZone:]:发送到实例的未识别的选择器”

因此,尽管List< T >中有copy(),但我们永远无法真正使用它。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-29 17:30:35

没有必要使List<T>NSCopying相一致才能使用复制成员函数来扩展它,除非您试图从Objective在泛型上下文中复制它。NSCopying是一种遗留协议,在纯Swift中使用没有太多意义。它是类绑定的,没有很好的类型签名.

如果您试图在纯Swift中的泛型上下文中使用NSCopying,请考虑定义自己的Copyable协议并扩展类型以符合此要求。既然不是@objc,你应该会没事的。已经符合NSCopying的现有类型也需要扩展以符合Copyable,但是您可以将逻辑放在NSCopying的扩展中。

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39124294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档