【问题标题】: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?> 

等等...我有两个问题:

  1. 如何检查包含任何可选类型的 Array 的类型?

  2. 无论它包含什么类型(可选或非可选),我如何遍历这样的数组?

有关上下文,请参阅此要点中的 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 次...无法访问每个元素。我会把它留在这个自动取款机上。

    【讨论】: