Xcode7和swift,我的代码:
func loadDefaults() {
let settingBundle = NSBundle.mainBundle().pathForResource("Settings", ofType: "bundle")
if settingBundle == nil {
return
}
let root = NSDictionary(contentsOfFile: settingBundle!.stringByAppendingString("Root.plist"))
let prefrences = root?.objectForKey("PreferenceSpecifiers") as! Array<NSDictionary>
let defautlsToRegister = NSMutableDictionary(capacity: root!.count)
for prefrence in prefrences {
let key = prefrence.objectForKey("Key") as! String!
if key != nil {
defautlsToRegister.setValue(prefrence.objectForKey("DefaultVale"), forKey: key!)
}
}
NSUserDefaults.standardUserDefaults().registerDefaults(defautlsToRegister as [NSObject: AnyObject])
}
问题代码:
NSUserDefaults.standardUserDefaults().registerDefaults(defautlsToRegister as [NSObject: AnyObject])
建立警告
无法将'[NSObject:AnyObject]'类型的值转换为预期的参数类型'[String:AnyObject]'
更改代码:
NSUserDefaults.standardUserDefaults().registerDefaults(defautlsToRegister as [String: AnyObject])
建立警告
'NSMutableDictionary'不能转换为'[String:AnyObject]'
请教我怎么做?感谢。
答案 0 :(得分:5)
您的defautlsToRegister
应采用以下格式[String: AnyObject]
示例:以下内容无需警告
let defautlsToRegister = ["Test":10]
NSUserDefaults.standardUserDefaults().registerDefaults(defautlsToRegister as [String: AnyObject])
答案 1 :(得分:2)
我注意到这个错误很简单。我不确定是否是这种情况,但是铸造String to NSString
似乎可以解决我的问题。我找到了一个解释,AnyObject
是一个类型别名,用于表示任何引用类型的实例,例如:NSString
。但String
是struct
,因此它不能是AnyObject
的引用类型。
我认为有两种方法:
首先:
let keyForMyKey: NSString = NSString(string: "mykey")
let result = dict.objectForKey(keyForMyKey) as? NSMutableArray
第二
let result = dict.objectForKey(NSString(string: "myKey")) as? NSMUtableArray
此处有关此问题的更多信息:http://drewag.me/posts/swift-s-weird-handling-of-basic-value-types-and-anyobject
答案 2 :(得分:0)
对我而言,这是有效的。
let token = fields["X-AUTH-TOKEN"]! as? [[String : AnyObject]] //{
// safe to use employees
self.bindings.setObject(NSString(format: "%@", token!) as String, forKey: "X-AUTH-TOKEN")
格式(NSString方法)将在此方案中起作用。