如何循环遍历字典并检查每个项的值类型?
示例字典:
var dict = ([
"a number" : 1,
"a boolean" : false,
"a string" : "Hello"
])我检查价值观的尝试:
for item in dict.1 {
if let current = item as? NSNumber {
print(current)
}
}我试过这个:
for item in settings {
if item[1] == item[1] as NSNumber {
print(item)
}
}重要注意事项:
正如@Leo所指出的,在比较时跟踪字典的值类型是很重要的。我作为示例包含的字典将是[String : NSObject]类型,而我的项目中的字典是[String : NSNumber]类型的。必须以不同的方式对待他们!
发布于 2015-06-11 01:25:33
您可以在is中使用
var dict = ([
"a number" : 1,
"a boolean" : false,
"a string" : "Hello"
])
for (key,value) in dict{
if value is String{
println(value)
}
}你也可以得到className
for (key,value) in dict{
println(String.fromCString(object_getClassName(value)))
}这将记录
Optional("__NSCFString")
Optional("__NSCFNumber")
Optional("__NSCFBoolean")更新:
Swift是一种类型的安全语言,所以如果您有这样的字典
var dict = ([
"a number" : 1,
"a boolean" : false,
])dict是[String : NSNumber]的类型,所以不需要检查。
但是,如果你有这样的字典
var dict = ([
"a number" : 1,
"a boolean" : false,
"a string" : "Hello"
])然后dict是[String:NSObject]类型,在本例中您需要检查类型。
更新,检查它是Int还是Bool
那么最好将字典声明为[String:Any]。
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)
}
}发布于 2015-06-11 01:25:04
从快速引用来看,下面是如何在字典中迭代
反复阅读字典 您可以在字典中使用for-in循环迭代键值对.字典中的每个项作为(键,值)元组返回,您可以将元组的成员分解为临时常量或变量,作为迭代的一部分:
for (airportCode, airportName) in airports {
println("\(airportCode): \(airportName)")
}
// YYZ: Toronto Pearson
// LHR: London Heathrow所以这应该适用于你的例子。
var dict = ([
"a number" : 1,
"a boolean" : false,
"a string" : "Hello"
])
for (k,v) in dict {
if let x = v as? NSNumber {
println("x = \(x)")
}
}发布于 2015-06-11 03:26:12
您还可以使用dynamicType查找类,然后使用一个简单的开关语句来执行适当的操作。
var dict = ([
"a number" : 1,
"a boolean" : false,
"astring" : "Hello"
])
for (k,v) in dict {
switch "\(v.dynamicType)" {
case "__NSCFString":
println("found String = \(v)")
case "__NSCFBoolean":
println("found Boolean = \(v as! Bool)")
case "__NSCFNumber":
println("found Number = \(v)")
default:break
}
}https://stackoverflow.com/questions/30769932
复制相似问题