在Swift

时间:2015-06-18 16:22:02

标签: arrays json swift nullable

我使用反射尝试使用XCode 7 Beta JSON Serializer创建 Swift 2.0。我得到一个被解包成Any的值?类型。我可以通过说:

来检查它是否是一个数组
if value is NSArray { ... }

但这对包含

等选项的数组不起作用
Array<Int?>
Array<Double?> 

等...我有两个问题:

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

  2. 如果它包含哪种类型,无论是选项还是非选项,我如何迭代这样的数组?

  3. 请参阅此要点中的注释以获取上下文: https://gist.github.com/peheje/d69351ce2181ba349337 到目前为止,似乎工作正常,只要数组不包含选项。

1 个答案:

答案 0 :(得分:0)

好的回答我自己的问题:

为了检查包含可选值的数组,我完全详细了。它不会捕获填充了可选自定义对象的数组。至于转换为可以迭代的数组,我使用Array构造函数和arrayLiteral参数。

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次......无法访问每个元素。我将把它留在这个地方。