无法专门化非泛型类型“Set”

Posted

技术标签:

【中文标题】无法专门化非泛型类型“Set”【英文标题】:Cannot specialize non-generic type 'Set' 【发布时间】:2016-07-11 12:13:24 【问题描述】:

这是我的NSManagedObject

@objc(Order)
class Order: NSManagedObject 

    @NSManaged var orderItems: Set<OrderItem> //error: Cannot specialize non-generic type 'Set'

有人知道为什么它不起作用吗?

OrderItem 文件已创建并且适用于以下声明:

@NSManaged var orderItem: OrderItem

【问题讨论】:

使用 Xcode 7.3.1 在操场上运行良好,您使用的是哪个版本的 Swift? 同一个Xcode,如何查看Swift版本? 您的项目中没有其他 Set 类型? 哦,是的,你太棒了,我还有另一种类型的Set。你救了我的命;) 对不起,我的错误:Swift.Set&lt;OrderItem&gt;:) 【参考方案1】:

仅供参考,如果将来有人会因为这个讨厌的错误来回答这个问题,因为讨论在 cmets 中进行了。

是的,Swift 中默认的 Set 类型是泛型的,但在这种情况下,自定义的非泛型 Set 类隐藏了该语言的标准库定义的类。

最好始终为您的类选择不同的名称,以避免名称冲突。但如果需要,您始终可以使用类的完全限定名称来引用您想要的类。

标准语言类在 Swift. 命名空间下可用,而对于其他类,您可以使用模块名称后跟一个点和类的名称(例如 Foundation.NSString)。

【讨论】:

以上是关于无法专门化非泛型类型“Set”的主要内容,如果未能解决你的问题,请参考以下文章

从非泛型类调用抽象泛型类中定义的方法的最佳方法是啥

C# 2.0 新特性(上)

C#泛型类容器

为啥 C# 无法从非泛型静态方法的签名推断泛型类型参数类型?

是否可以使用 .NET 泛型类实现 COM 接口?

泛型集合和非泛型集合的区别