尝试处理一个可以是数组或数字的对象
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
可以是 NSNumber
或 NSNumber
.
的数组
感谢不存在的文档,我想在 Swift 中,它将是 Int
或 Array<Int>
.
当我 运行 这段代码时,我得到第二个 if
是 true
。所以,在我的例子中,family
是一个 Array<Int>
.
这是我不明白的地方。如果 family
是 Array<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`.
}
我正在尝试从 infoDictionary
中读取 UIDeviceFamily
的值,如下所示:
if let family = Bundle.main.infoDictionary?["UIDeviceFamily"] {
if family is Array<Int> {
}
}
根据 2010 年的文档,UIDeviceFamily
可以是 NSNumber
或 NSNumber
.
感谢不存在的文档,我想在 Swift 中,它将是 Int
或 Array<Int>
.
当我 运行 这段代码时,我得到第二个 if
是 true
。所以,在我的例子中,family
是一个 Array<Int>
.
这是我不明白的地方。如果 family
是 Array<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`.
}