循环遍历字典并检查每个值类型

Dan*_*ieu 2 dictionary loops swift swift2

如何遍历字典并检查每个项目的类型?

示例字典:

var dict = ([
    "a number" : 1,
    "a boolean" : false,
    "a string" : "Hello"
])
Run Code Online (Sandbox Code Playgroud)

我尝试检查值:

for item in dict.1 {
    if let current = item as? NSNumber {
        print(current)
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过这个:

for item in settings {
    if item[1] == item[1] as NSNumber {
        print(item)
    }
}
Run Code Online (Sandbox Code Playgroud)

重要的提示:

正如@Leo指出的那样,在比较时跟踪词典的值类型是很重要的.我作为我的例子包含的字典是类型[String : NSObject]的,我的项目中的字典是类型的[String : NSNumber].他们必须以不同的方式接近!

Leo*_*Leo 5

你可以is在swift中使用

var dict = ([
    "a number" : 1,
    "a boolean" : false,
    "a string" : "Hello"
])

for (key,value) in dict{
    if value is String{
        println(value)
    }
}
Run Code Online (Sandbox Code Playgroud)

你也可以获得className

for (key,value) in dict{
   println(String.fromCString(object_getClassName(value)))

}
Run Code Online (Sandbox Code Playgroud)

这将记录

Optional("__NSCFString")
Optional("__NSCFNumber")
Optional("__NSCFBoolean")
Run Code Online (Sandbox Code Playgroud)

更新:

Swift是一种类型安全的语言,所以如果你有这样的字典

var dict = ([
        "a number" : 1,
        "a boolean" : false,
        ])
Run Code Online (Sandbox Code Playgroud)

dict是类型的[String : NSNumber],所以你不需要检查.

但是,如果你有这样的字典

 var dict = ([
        "a number" : 1,
        "a boolean" : false,
        "a string" : "Hello"
        ])
Run Code Online (Sandbox Code Playgroud)

然后dict是type [String:NSObject],在这种情况下你需要检查类型.

更新,检查它是Int还是Bool

最好将你的字典声明为[String:Any] Then

      var dict:[String:Any] = ([
        "a number" : 1,
        "a boolean" : false,
        ])

    for (key,value) in dict{
        if value is Bool{
            println(value)
       }
        if value is Int{
            println(value)
        }
    }
Run Code Online (Sandbox Code Playgroud)