麻烦在Swift中使用NSDictionary方便init

时间:2014-10-12 16:55:42

标签: ios xcode swift ios8 nsdictionary

我似乎在尝试使用其中一个方便的初始化程序在Swift中创建NSDictionary时遇到了问题。我的困惑在于错误说我的函数签名错误,但我正在使用XCode自动完成的函数签名。

我的代码:

var query = NSDictionary(objects: [kSecClass, kSecAttrService, kSecAttrAccount, kSecReturnData], forKeys: [kSecClassGenericPassword, "healthBIT.lastSync", key, true])

XCode提供了签名:

var query = NSDictionary(objects: <#[AnyObject]#>, forKeys: <#[AnyObject]#>)

编译时的错误是:调用中的额外参数'forKeys'

我在这里缺少什么?我是不是太沉睡了,看不出明显的?或者这只是因为我对Swift缺乏经验而导致的一个愚蠢的错误?

PS:我试图在这里使用NSDictionary而不是普通的Swift dict,因为Swift dicts不能存储混合类型,我需要将它传递给底层的基于C的Keychain API。

1 个答案:

答案 0 :(得分:0)

在聊天讨论后,结果发现问题是关于问题中提供的代码示例引用的key变量,该变量来自for循环:

for key in lastSync {
    ...
}

错误是key(key, value)元组,并且在NSDictionary中使用它时会导致问题(objc类型无法处理快速的特定功能,例如泛型,元组等。)。

通过相应地扩展元组来解决问题:

for (key, value) in lastSync {
    ...
}

或者,如果未使用value

for (key, _) in lastSync {
    ...
}