将通用数组转换为 NSOrderedSet?
Convert generic array to NSOrderedSet?
我需要为 fetch
分配 return 值:
try! c.fetch(fr)
对多关系 (itemsWithoutRatingOfLoggedInUser
):
Utility.app(c: c).itemsWithoutRatingOfLoggedInUser = try! c.fetch(fr2)
并出现以下错误。我能做些什么?我尝试使用 as!
运算符进行转换,但没有帮助。
转换(使用 as
)适用于一种类型的值可以 解释 为其他明确相关类型的值的情况。这种 解释 是根据语言特性定义的:要么是类型关系(如继承或协议一致性),要么是 Swift 可以桥接 Foundation 或 CF 类型的少数特殊情况 to/from 他们的 Swift 标准库等价物。
当你施法时,你是在要求 Swift compiler/runtime 稍微眯起眼睛,假装一种类型是另一种类型。 (甚至可以在幕后做一些小动作,这样假装就可以了。)大多数情况下,转换发生在你有一个值时 你 比 Swift 更了解它的类型(在您正在编写的函数的上下文中)确实如此。
当你的类型虽然语言特性没有明确相关时——也就是说,一个不是另一个的子类,或者一个不是另一个采用的协议,或者它们不是一个来自 Foundation/CF 的特殊等效类型集,Swift 知道如何桥接 — 你必须 convert,而不是转换。 (Swift 当类型在语义上足够不同以至于您需要考虑转换的后果时,例如在有符号整数和无符号整数之间转换时,Swift 也让您进行转换而不是强制转换。)
Array
和 NSOrderedSet
在语义上是不同的类型,您必须转换,而不是转换。
类型之间的转换要求被转换的类型 to 知道被转换的类型 from,所以执行转换你使用目标类型的 initializer。
let stuff = managedObjectContext.fetch(request)
let orderedSet = NSOrderedSet(array: stuff)
请注意 NSOrderedSet
不是 Swift 3 中的泛型类型,因此即使您从类型化数组 ([MyObject]
) 创建它,元素也会以 Any
。 那是 转换用例:
let item = orderedSet as! MyObject
我需要为 fetch
分配 return 值:
try! c.fetch(fr)
对多关系 (itemsWithoutRatingOfLoggedInUser
):
Utility.app(c: c).itemsWithoutRatingOfLoggedInUser = try! c.fetch(fr2)
并出现以下错误。我能做些什么?我尝试使用 as!
运算符进行转换,但没有帮助。
转换(使用 as
)适用于一种类型的值可以 解释 为其他明确相关类型的值的情况。这种 解释 是根据语言特性定义的:要么是类型关系(如继承或协议一致性),要么是 Swift 可以桥接 Foundation 或 CF 类型的少数特殊情况 to/from 他们的 Swift 标准库等价物。
当你施法时,你是在要求 Swift compiler/runtime 稍微眯起眼睛,假装一种类型是另一种类型。 (甚至可以在幕后做一些小动作,这样假装就可以了。)大多数情况下,转换发生在你有一个值时 你 比 Swift 更了解它的类型(在您正在编写的函数的上下文中)确实如此。
当你的类型虽然语言特性没有明确相关时——也就是说,一个不是另一个的子类,或者一个不是另一个采用的协议,或者它们不是一个来自 Foundation/CF 的特殊等效类型集,Swift 知道如何桥接 — 你必须 convert,而不是转换。 (Swift 当类型在语义上足够不同以至于您需要考虑转换的后果时,例如在有符号整数和无符号整数之间转换时,Swift 也让您进行转换而不是强制转换。)
Array
和 NSOrderedSet
在语义上是不同的类型,您必须转换,而不是转换。
类型之间的转换要求被转换的类型 to 知道被转换的类型 from,所以执行转换你使用目标类型的 initializer。
let stuff = managedObjectContext.fetch(request)
let orderedSet = NSOrderedSet(array: stuff)
请注意 NSOrderedSet
不是 Swift 3 中的泛型类型,因此即使您从类型化数组 ([MyObject]
) 创建它,元素也会以 Any
。 那是 转换用例:
let item = orderedSet as! MyObject