无法在swift iOS中向NSMutableDictionary添加项目

时间:2014-06-28 14:39:35

标签: ios swift nsmutabledictionary

我想将以下项添加到NSMutableDictionary但是我收到以下错误

could not find an overload for setObject that accepts the following arguments


import Security

var returnDictionary = NSMutableDictionary()

returnDictionary.setObject(anObject: kSecClassGenericPassword, forKey: kSecClass)

当我浏览到security.h文件时,显示的属性声明如下:

var kSecClass: Unmanaged<AnyObject>!
var kSecClassGenericPassword: Unmanaged<AnyObject>!

3 个答案:

答案 0 :(得分:2)

功能声明为func setObject(anObject: AnyObject!, forKey aKey: NSCopying!)

其中, anObject :字典维护对象的强引用。如果anObject为nil,则引发NSInvalidArgumentException。如果需要在字典中表示nil值,请使用NSNull。

aKey :价值的关键。密钥被复制(使用copyWithZone:;密钥必须符合NSCopying协议)。如果aKey为nil,则引发NSInvalidArgumentException。如果字典中已存在aKey,则anObject取代它。

在你的情况下 kSecClass 不符合 NSCopying 协议,因此它会给你错误。

尝试使用returnDictionary = NSMutableDictionary(objects: [kSecClassGenericPassword], forKeys: [kSecClass])

以下代码也应该有效Using Swift with Cocoa and Objective-C

var kSecClassSwift: NSString = kSecClass.takeRetainedValue() as NSString
returnDictionary.setObject(accessGroup, forKey: kSecClassSwift)

由于Xcode 6 beta中的错误,它现在无法正常工作,我希望在下一个版本中苹果能够修复它。

答案 1 :(得分:2)

您必须直接传递字符串,即"class""genp"。您可能想要提交有关此问题的错误报告; Apple需要为这些常量提供更多Swift友好的桥接。

答案 2 :(得分:0)