尝试处理一个可以是数组或数字的对象

Trying do deal with an object that can be an array or a number

我正在尝试从 infoDictionary 中读取 UIDeviceFamily 的值,如下所示:

if let family = Bundle.main.infoDictionary?["UIDeviceFamily"] {
  if family is Array<Int> {

  }
}

根据 2010 年的文档,UIDeviceFamily 可以是 NSNumberNSNumber.

的数组

感谢不存在的文档,我想在 Swift 中,它将是 IntArray<Int>.

当我 运行 这段代码时,我得到第二个 iftrue。所以,在我的例子中,family 是一个 Array<Int>.

这是我不明白的地方。如果 familyArray<Int>,则第二个 if 之后的下一行可能是

let firstValue = family.first

但这会失败。

family 是数组或数字时,如何从中提取值?有简单的方法吗?

尝试

if let arr =  family as? Array<Int> {
   print(arr)
}
else if let item = family as? Int {
   print(item)
} 

另一种方法是使用带有类型转换模式的 switch 语句:

switch Bundle.main.infoDictionary?["UIDeviceFamily"] {
case let intArray as [Int]:
    print(intArray)
case let singleInt as Int:
    print(singleInt)
default:
    break // Something else, or `nil`.
}