Swift 将NSNumber的值指定给任何对象
我有一段从API获取信息的代码,我需要将其添加到字典中。代码如下:Swift 将NSNumber的值指定给任何对象,swift,Swift,我有一段从API获取信息的代码,我需要将其添加到字典中。代码如下: typealias JSONdic = [String: AnyObject] var weatherData: AnyObject = StorageManager.getValue(StorageManager.StorageKeys.WeatherData)! let json: AnyObject = ["Any": "Object"] if let json = json as? JSONdic, histo
typealias JSONdic = [String: AnyObject]
var weatherData: AnyObject = StorageManager.getValue(StorageManager.StorageKeys.WeatherData)!
let json: AnyObject = ["Any": "Object"]
if let json = json as? JSONdic, history = json["history"] as? JSONdic, tempi = history["tempi"] as? Int, hum = history["hum"] as? String, precip = history["precipi"] as? String{
println("Temperature:\(tempi) Humidity:\(hum) Precipitation:\(precip)")
weatherData = [NSDate: AnyObject]()
let temp = tempi as NSNumber
weatherData[(The Current Date)] = temp
}
我想先将“temp”添加到weatherData字典中,但即使在将其转换为NSNumber之后,我被告知NSNumber值不能分配给AnyObject?!类型。有人能帮我解决这个问题吗?您的
weatherData
变量的类型是AnyObject
。尽管您后来为它指定了一个类型为[NSDate:AnyObject]
的值,但编译器仍然认为该变量本身是AnyObject
。然后,您遇到了问题,因为您试图为它下标,并分配了一个NSNumber
,这在AnyObject
上显然是不可能的
您的weatherData
声明应确保它是您想要的类型。如果您确信您的StorageManager
将为天气数据键返回适当的字典类型,则可以强制将其向下转换为正确的类型:
var weatherData = StorageManager.getValue(StorageManager.StorageKeys.WeatherData) as! [NSDate: NSObject]
您是使用
let
还是var
定义weatherData?weatherData被定义为一个变量。您对错误的描述似乎与您显示的代码不匹配。上面的代码意味着weatherData
属于[NSDate:AnyObject]
类型,但错误意味着它是一个字典,其值属于AnyObject类型代码>。当您alt单击weatherData
变量时,它会显示什么?当我alt单击weatherData变量时,它只会突出显示定义它的位置。此外,我还添加了weatherData的初始定义。如果您需要更多信息,我将发布整个类。我认为您是在命令单击,而不是alt单击(除非您调整了默认键绑定?),问题已经解决;它应该是NSObject而不是AnyObject。您也不能下标NSObject
。如果您想将您的weatherData
视为字典,它需要是dictionary
类型。我的意思是,在字典定义中,它不是[NSDate:AnyObject],而是[NSDate:NSObject]。此外,它读取var weatherData:[NSDate:NSObject]=..,而不是var weatherData:AnyObject=。好的,听起来不错!很高兴你把它整理好了。您仍然可以将NSNumber
存储为AnyObject
,但是可能需要强制转换以防止编译器出现警告/错误。选择NSObject
作为值类型,就像您现在所做的那样,是一个更好的主意-我在回答中也改变了这一点。