我似乎在尝试使用其中一个方便的初始化程序在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。
答案 0 :(得分:0)
在聊天讨论后,结果发现问题是关于问题中提供的代码示例引用的key
变量,该变量来自for
循环:
for key in lastSync {
...
}
错误是key
是(key, value)
元组,并且在NSDictionary
中使用它时会导致问题(objc类型无法处理快速的特定功能,例如泛型,元组等。)。
通过相应地扩展元组来解决问题:
for (key, value) in lastSync {
...
}
或者,如果未使用value
:
for (key, _) in lastSync {
...
}