ios - 将通用数组转换为 NSOrderedSet?

标签 ios generics core-data nsorderedset

我需要分配一个fetch的返回值:

try! c.fetch(fr)

对多关系(itemsWithoutRatingOfLoggedInUser):

Utility.app(c: c).itemsWithoutRatingOfLoggedInUser = try! c.fetch(fr2)

并得到以下错误。我能做些什么?我尝试使用 as! 运算符进行转换,但没有帮助。

enter image description here

最佳答案

转换(使用 as)适用于一种类型的值可以解释为其他明确相关类型的值的情况。这种解释是根据语言特性定义的:类型关系(如继承或协议(protocol)一致性),或者 Swift 可以将 Foundation 或 CF 类型与其 Swift 标准库等价物桥接的少数特殊情况.

当你转换时,你是在要求 Swift 编译器/运行时稍微眯起眼睛,假装一种类型是另一种类型。 (甚至可以在幕后做一些小 Action ,这样假装就可以了。)大多数情况下,转换发生在你有一个值时,比 Swift 更了解它的类型(在函数的上下文中你'正在写作)确实如此。

当您的类型通过语言特性没有明确相关时——也就是说,一个不是另一个的子类,或者一个不是另一个采用的协议(protocol),或者它们不是Swift 知道如何桥接的来自 Foundation/CF 的特殊等效类型集——你必须转换,而不是转换。 (当类型在语义上足够不同以至于您需要考虑转换的后果时,Swift 还让您进行转换而不是强制转换,例如在有符号整数和无符号整数之间转换时。)

ArrayNSOrderedSet 在语义上是不同的类型,您必须转换,而不是转换。

类型之间的转换要求被转换的类型知道被转换的类型,因此要执行转换,您可以使用initializer。目标类型。

let stuff = managedObjectContext.fetch(request)
let orderedSet = NSOrderedSet(array: stuff)

请注意 NSOrderedSet 不是 Swift 3 中的泛型类型,因此即使您从类型化数组 ([MyObject]) 创建它,元素也会作为任何这是转换的用例:

let item = orderedSet as! MyObject

关于ios - 将通用数组转换为 NSOrderedSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40919126/

相关文章:

ios - 如何在 iPhone 应用程序中设置特定键盘?

ios - 使用 ios swift 3 在 linkedin 上分享帖子,而 linkedin sdk 无法正常工作

ios - 核心数据按日期升序然后按 nil 排序

ios - Swift 数据缓存 - 最佳实践

ios - 动态提供数据时,AdBlock 在 iOS 中不起作用?

ios - Facebook 获取用户状态

c# - 字典列表中的唯一字典(c#)

c# - 如何声明一个泛型类型的泛型约束

java - 如何处理 Java 中的泛型枚举?

ios - Swift 2.1 Core Data - 保存具有一对多关系的数据,但如果已经存在则不添加 isome 数据