Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 将NSNumber的值指定给任何对象_Swift - Fatal编程技术网

Swift 将NSNumber的值指定给任何对象

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

我有一段从API获取信息的代码,我需要将其添加到字典中。代码如下:

 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
作为值类型,就像您现在所做的那样,是一个更好的主意-我在回答中也改变了这一点。