我想创建一个字典来保存这些值,但是我收到以下错误
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>!'
答案 0 :(得分:2)
在大多数使用Swift的情况下,我发现声明字典类型的痛苦要小得多。在你的情况下:
var keychainQuery: Dictionary<String, AnyObject> = [
...
]
应该工作。
答案 1 :(得分:1)
据我所知,使用Swift词典构建Keychain查询不可能。 像 kSecClass 这样的键是不可清除的类型,所以不能放在一个字典中(严格要求共享相同协议的项目。)
我看到绕过这个问题的方法之一是使用NSDictionary并将键和值作为数组传递。此代码似乎只适用于 Xcode 6 Beta 1 。
var query = NSMutableDictionary(objects: [kSecClassGenericPassword, service, account, secret], forKeys: [kSecClass, kSecAttrService, kSecAttrAccount, kSecValueData])
可以看到另一种方法on this Stackoverflow answer。
基于该方法,您将使用 \()
语法将所有键和值常量转换为字符串。
该查询将如下所示:
var query = ["\(kSecClass)": "\(kSecClassGenericPassword)", "\(kSecAttrService)": service, "\(kSecAttrAccount)": account, "\(kSecValueData)": secretData]
我测试了这个解决方案并收到错误消息,说我正在尝试添加已有的密钥。所以这似乎也不起作用。