斯威夫特,无法创建字典来保存键值?



我想创建一个字典来保存这些值,但我得到以下错误

import Security
var keychainQuery: Dictionary =
            [
                kSecClass: kSecClassGenericPassword,
                kSecAttrService: service,
                kSecAttrAccount: userAccount,
                dataFromString: kSecValueData
            ]
Cannot convert the expression's type 'Dictionary' to type '@lvalue Unmanaged<AnyObject>!'

在使用Swift的大多数情况下,我发现声明字典的类型要轻松得多。在你的例子中:

var keychainQuery: Dictionary<String, AnyObject> = [
    ...
]

据我所知,目前,用Swift字典构建Keychain查询是不可能的。像kSecClass这样的键是不可哈希类型的,因此不能放在字典中(顺便说一下,严格要求条目共享相同的协议)。

我所看到的规避这个问题的方法之一是使用NSDictionary并将键和值作为数组传递。这个代码似乎只在Xcode 6 Beta 1中工作。
var query = NSMutableDictionary(objects: [kSecClassGenericPassword, service, account, secret], forKeys: [kSecClass, kSecAttrService, kSecAttrAccount, kSecValueData])

在这个Stackoverflow答案中可以看到另一种方法。基于该方法,您可以使用 () 语法将转换为所有键和值常量。然后查询看起来像这样:

var query = ["(kSecClass)": "(kSecClassGenericPassword)", "(kSecAttrService)": service, "(kSecAttrAccount)": account, "(kSecValueData)": secretData]

我测试了这个解决方案,得到了一个错误,说我正在尝试添加已经存在的键。

最新更新