xcode Swift 错误:对泛型类型字典的引用需要 <...> 中的参数

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/27728350/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 06:26:26  来源:igfitidea点击:

Swift error: Reference to generic type Dictionary requires arguments in <...>

iosiphonexcodeswiftdictionary

提问by s_kirkiles

The error Reference to generic type Dictionary requires arguments in <...>is appearing on the first line of the function. I am trying to have the function return an NSDictionary retrieved from an api. Anyone know what could be going on here?

错误Reference to generic type Dictionary requires arguments in <...>出现在函数的第一行。我试图让函数返回一个从 api 检索到的 NSDictionary。有谁知道这里会发生什么?

class func getCurrentWeather(longitude: Float, latitude: Float)->Dictionary?{

let baseURL = NSURL(string: "https://api.forecast.io/forecast/\(apikey)/")
let forecastURL = NSURL(string: "\(longitude),\(latitude)", relativeToURL:baseURL)

let sharedSession = NSURLSession.sharedSession()
let downloadTask: NSURLSessionDownloadTask = sharedSession.downloadTaskWithURL(forecastURL!, completionHandler: { (location: NSURL!, response: NSURLResponse!, error: NSError!) -> Void in

    if(error == nil) {
        println(location)
        let dataObject = NSData(contentsOfURL:location!)
        let weatherDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(dataObject!, options: nil, error: nil) as NSDictionary
        return weatherDictionary
    }else{
        println("error!")
        return nil

    }
})
}

EDIT:

编辑:

Second Issue:

第二期:

    class func getCurrentWeather(longitude: Float, latitude: Float)->NSDictionary?{

    let baseURL = NSURL(string: "https://api.forecast.io/forecast/\(apikey)/")
    let forecastURL = NSURL(string: "\(longitude),\(latitude)", relativeToURL:baseURL)

    let sharedSession = NSURLSession.sharedSession()
    let downloadTask: NSURLSessionDownloadTask = sharedSession.downloadTaskWithURL(forecastURL!, completionHandler: { (location: NSURL!, response: NSURLResponse!, error: NSError!) -> Void in

        if(error == nil) {
            println(location)
            let dataObject = NSData(contentsOfURL:location!)
            let weatherDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(dataObject!, options: nil, error: nil) as NSDictionary


            return weatherDictionary //ERROR: NSDictionary not convertible to void

        }else{
            println("error!")
            return nil ERROR: Type void does not conform to protocol 'NilLiteralConvertible'

        }
    })
    }

回答by Midhun MP

If you are planning to return a Dictionary then you need to specify the type of key and data in it.

如果您打算返回一个 Dictionary,那么您需要指定其中的键和数据的类型。

Eg:If your key and value both are Strings then you can write something like:

例如:如果您的键和值都是字符串,那么您可以编写如下内容:

class func getCurrentWeather(longitude: Float, latitude: Float) -> Dictionary <String, String>?
{
   ...
}

If you are not sure about the data in it or if you have multiple type of data, change the return type from Dictionaryto NSDictionary.

如果您不确定其中的数据,或者您有多种类型的数据,请将返回类型从 更改DictionaryNSDictionary

class func getCurrentWeather(longitude: Float, latitude: Float) -> NSDictionary?
{
    ...
}

or

或者

You can write like:

你可以这样写:

class func getCurrentWeather(longitude: Float, latitude: Float) -> Dictionary <String, AnyObject>?
{
   ...
}