在不知道该条目的键或值的情况下,使用一个条目访问内部词典(词典词典)

时间:2015-09-01 09:52:58

标签: swift dictionary swift2

这是我宣布我的词典的方式:

var dataDictionary: [NSIndexPath:[Int:Bool]]!

内部字典总是只有一个条目,例如 [1:真] 即可。当我搜索dataDictionary时,我指定了一个NSIndexPath。返回内部字典。是这样的:

var innerDictionary = dataDictionary[indexPath] // is of type [Int:Bool]

我想访问内部词典的键和值,但我不想指定一个Integer或Bool,因为它是未知的。我只想将Int和/或Bool值存储在内部字典中。不需要搜索内部字典,因为if将始终只包含一个条目。也许是这样的:

var key = innerDictionary.key
var value = innerDictionary.value

如何实现这一目标?

3 个答案:

答案 0 :(得分:1)

尝试这样:

 func nestedDic(){
 var innerDictionary:NSDictionary = ["Item 1": "data 0", "Item 2": "data 1"]
    //NSLog("original object:\(innerDictionary)")
    NSLog("all keys array:\(innerDictionary.allKeys)")

    if(innerDictionary.isKindOfClass(NSDictionary)){
        for key  in innerDictionary.allKeys{
            let value = innerDictionary.valueForKey(key as! NSString as String)
            NSLog("key value = \(value as! String)")
        }
    }
}

答案 1 :(得分:1)

如果您的词典只有一个条目,并且您不知道密钥,使用Swift 2,您可以安全地使用keys获取if let序列的第一个元素:

let innerDictionary = [42: true]

if let k = innerDictionary.keys.first {
    print(k)  // prints 42
} else {
    // dict is empty
}

值相同:

if let v = innerDictionary.values.first {
    print(v)  // prints true
} else {
    // key has no value
}

答案 2 :(得分:1)

如果只有一个条目,您可以为内部字典创建一个简单的结构,然后您就可以使用自己喜欢的属性名称。

struct InnerDictionary {
  var key = 0
  var value = false
}

let indexPath = NSIndexPath(index: 1)
var dataDictionary = [indexPath: InnerDictionary(key: 1, value: true)]

if let innerDictionary = dataDictionary[indexPath] {
  var key = innerDictionary.key
  var value = innerDictionary.value
}