Swift 4.2,Xcode 10.2 无合并运算符警告
Swift 4.2, Xcode 10.2 nil coalescing operator warning
在 Xcode 10.1
上,以下语句没有任何问题,但在将 Xcode
更新为 10.2
后,编译器正在为该语句生成警告。
return [
"sublevels": (self.sublevels?.array ?? [Sublevel]()) as NSObject
]
sublevels
为NSOrderedSet
,产生的警告如下:
Left side of nil coalescing operator '??' has non-optional type '[Any]?', so the right side is never used
但是如果我如下打破单个语句,警告就会消失。
let sublevels = self.sublevels?.array ?? [Sublevel]()
return [
"sublevels": sublevels as NSObject
]
谁能解释一下 - 第一个陈述有什么问题?
如 OOPer 所述,解决方案是提供一个默认的 Any
值作为运算符的右侧,在本例中为 [Any]
,因为 NSOrderedSet
没有绑定到它的特定类型。解决方案是:
return [
"sublevels": (self.sublevels?.array ?? []) as NSObject
]
有关此问题的更多信息,我建议您查看 type casting。在页面底部有关于转换 Any
类型的解释。
在 Xcode 10.1
上,以下语句没有任何问题,但在将 Xcode
更新为 10.2
后,编译器正在为该语句生成警告。
return [
"sublevels": (self.sublevels?.array ?? [Sublevel]()) as NSObject
]
sublevels
为NSOrderedSet
,产生的警告如下:
Left side of nil coalescing operator '??' has non-optional type '[Any]?', so the right side is never used
但是如果我如下打破单个语句,警告就会消失。
let sublevels = self.sublevels?.array ?? [Sublevel]()
return [
"sublevels": sublevels as NSObject
]
谁能解释一下 - 第一个陈述有什么问题?
如 OOPer 所述,解决方案是提供一个默认的 Any
值作为运算符的右侧,在本例中为 [Any]
,因为 NSOrderedSet
没有绑定到它的特定类型。解决方案是:
return [
"sublevels": (self.sublevels?.array ?? []) as NSObject
]
有关此问题的更多信息,我建议您查看 type casting。在页面底部有关于转换 Any
类型的解释。