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

时间:2015-06-11 01:10:00

标签: swift loops dictionary swift2

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

示例字典:

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]。他们必须采用不同的方法!

4 个答案:

答案 0 :(得分:5)

您可以在swift中使用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)
        }
    }

答案 1 :(得分:1)

从swift引用中,这里是如何遍历字典

  

迭代字典

     

您可以使用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)")
  }
}

答案 2 :(得分:1)

您也可以使用dynamicType查找类,然后使用简单的switch语句来执行相应的操作

assert_equal session[:forwarding_url], user_path(@user)

答案 3 :(得分:0)

对于遇到警告问题的人,请确保将您的类型检查为上述@Leo。如果您的值类型是NSNumber,那么您将收到错误。如果NSObject类型使用@Leo's或@nPn的答案。

enter image description here

这对我的项目有用,其值类型为NSNumber:

for (key, value) in settings {

    if value == value as Bool {
        print(value)
    }
    if value == value as NSNumber {
        print(value)
    }
}