Swift,不能创建一个字典来保存键值吗?

时间:2014-06-28 13:49:18

标签: ios swift

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

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>!'

2 个答案:

答案 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]

我测试了这个解决方案并收到错误消息,说我正在尝试添加已有的密钥。所以这似乎也不起作用。