【问题标题】:Type checking and iterating through ANY array in Swift在 Swift 中对任何数组进行类型检查和迭代
【发布时间】:2025-12-01 07:40:01
【问题描述】:
我正在使用反射来尝试使用 XCode 7 Beta JSON 序列化器制作 Swift 2.0。我得到一个展开成 Any?类型。我可以通过说来检查它是否是一个数组:
if value is NSArray { ... }
但这不适用于包含诸如
之类的选项的数组
Array<Int?>
Array<Double?>
等等...我有两个问题:
如何检查包含任何可选类型的 Array 的类型?
无论它包含什么类型(可选或非可选),我如何遍历这样的数组?
有关上下文,请参阅此要点中的 cmets:
https://gist.github.com/peheje/d69351ce2181ba349337
到目前为止,只要数组不包含可选项,似乎一切正常。
【问题讨论】:
标签:
arrays
json
swift
nullable
【解决方案1】:
可以回答我自己的问题:
为了检查包含可选值的数组,我非常详细。它不会捕获填充了可选自定义对象的数组。至于转换为可以迭代的数组,我使用了带有 arrayLiteral 参数的 Array 构造函数。
if value is Array<Int?> || value is Array<Double?> || value is Array<Float?> ||
value is Array<Bool?> || value is Array<String?> {
let array = Array(arrayLiteral: value)
for i in array {
print(i)
}
}
有趣的是,我仍然无法用 !运营商。总是作为可选项。
尽我所能:
if value is Array<Int?> || value is Array<Double?> ||
value is Array<Float?> || value is Array<Bool?> || value is Array<String?> {
let array: Array<Any?>? = Array(arrayLiteral: val)
for i in array! {
print(i!)
}
}
仍然返回:
[可选(1),无,可选(3),可选(4),可选(5),可选(6)]
对于一个:
Array<Int?>
这可能是一个错误,Swift 2.0 仍在开发中。
编辑:
原来我没有迭代超过 1 次...无法访问每个元素。我会把它留在这个自动取款机上。