首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环遍历字典并检查每个值类型

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

Stack Overflow用户
提问于 2015-06-11 01:10:00
回答 4查看 3.8K关注 0票数 2

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

示例字典:

代码语言:javascript
复制
var dict = ([
    "a number" : 1,
    "a boolean" : false,
    "a string" : "Hello"
])

我检查价值观的尝试:

代码语言:javascript
复制
for item in dict.1 {
    if let current = item as? NSNumber {
        print(current)
    }
}

我试过这个:

代码语言:javascript
复制
for item in settings {
    if item[1] == item[1] as NSNumber {
        print(item)
    }
}

重要注意事项:

正如@Leo所指出的,在比较时跟踪字典的值类型是很重要的。我作为示例包含的字典将是[String : NSObject]类型,而我的项目中的字典是[String : NSNumber]类型的。必须以不同的方式对待他们!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-06-11 01:25:33

您可以在is中使用

代码语言:javascript
复制
var dict = ([
    "a number" : 1,
    "a boolean" : false,
    "a string" : "Hello"
])

for (key,value) in dict{
    if value is String{
        println(value)
    }
}

你也可以得到className

代码语言:javascript
复制
for (key,value) in dict{
   println(String.fromCString(object_getClassName(value)))

}

这将记录

代码语言:javascript
复制
Optional("__NSCFString")
Optional("__NSCFNumber")
Optional("__NSCFBoolean")

更新:

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

代码语言:javascript
复制
var dict = ([
        "a number" : 1,
        "a boolean" : false,
        ])

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

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

代码语言:javascript
复制
 var dict = ([
        "a number" : 1,
        "a boolean" : false,
        "a string" : "Hello"
        ])

然后dict是[String:NSObject]类型,在本例中您需要检查类型。

更新,检查它是Int还是Bool

那么最好将字典声明为[String:Any]

代码语言:javascript
复制
      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)
        }
    }
票数 5
EN

Stack Overflow用户

发布于 2015-06-11 01:25:04

从快速引用来看,下面是如何在字典中迭代

反复阅读字典 您可以在字典中使用for-in循环迭代键值对.字典中的每个项作为(键,值)元组返回,您可以将元组的成员分解为临时常量或变量,作为迭代的一部分:

代码语言:javascript
复制
for (airportCode, airportName) in airports {
        println("\(airportCode): \(airportName)")
    }
    // YYZ: Toronto Pearson
    // LHR: London Heathrow

所以这应该适用于你的例子。

代码语言:javascript
复制
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)")
  }
}
票数 1
EN

Stack Overflow用户

发布于 2015-06-11 03:26:12

您还可以使用dynamicType查找类,然后使用一个简单的开关语句来执行适当的操作。

代码语言:javascript
复制
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
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30769932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档