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].他们必须以不同的方式接近!
你可以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)