我想将以下项添加到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>!
答案 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)