Swift的字典键列表与Objective-C不同

时间:2014-09-23 01:36:39

标签: swift nsdictionary

Swift中的列表键行为与Objective-C不同。
目标C:

NSDictionary *myDict = @{@"key1": @"One",@"key2": @"Two",@"key3": @"Three"};

for (NSString *myKey in myDict) {
    NSLog(@"key: %@",myKey);
}

Objective-C调试输出:

key: key1 
key: key3
key: key2 

然而,Swift的表现不同:

let stringOfStrings = ["key1":"value1", "key2":"value2"]

for key in stringOfStrings {
    println(key)
}

斯威夫特的输出:

(key2, value2)
(key1, value1)

如何使Swift像Objective-C一样执行;即,仅列出键?

4 个答案:

答案 0 :(得分:5)

它看起来在Swift中表现不同的原因是,当你遍历字典时,你得到的是Tuple。这个特定的元组有一个“键”和一个“值”。如果你只想访问密钥,你应该只捕获元组的那一部分:

for (key, _) in stringOfStrings {
    println(key)
}

下划线(_)是一个占位符,您通常会捕获一个表明您实际上不想使用该变量的变量。如果您确实也使用了该值,则可以像这样循环:

for (key, value) in stringOfStrings {
    println("\(key): \(value)")
}

答案 1 :(得分:2)

使用keys属性:

let stringOfStrings = ["key1":"value1", "key2":"value2"]

for key in stringOfStrings.keys {
    println(key)
}

// key2
// key1

答案 2 :(得分:2)

试试这个:

for (key, value) in stringOfStrings

或者只是获取密钥:

for (key, _) in stringOfStrings

答案 3 :(得分:0)

Swift 2.0

您可以按照以下方式访问NSDictionary值:

let stringOfStrings = ["key1":"value1", "key2":"value2"]

for key in stringOfStrings {

print(key.0)
print(key.1)

}

或者只是获取密钥

for key in stringOfStrings {

print(key.0)

}