2015-01-01 5 views
9

में तर्कों की आवश्यकता है त्रुटि Reference to generic type Dictionary requires arguments in <...> फ़ंक्शन की पहली पंक्ति पर दिखाई दे रही है। मैं फ़ंक्शन को एक एपीआई से पुनर्प्राप्त एनएसबीई वापस करने की कोशिश कर रहा हूं। किसी को पता है कि यहां क्या हो सकता है?स्विफ्ट त्रुटि: सामान्य प्रकार के शब्दकोश के संदर्भ में <...>

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 

    } 
}) 
} 

संपादित करें:

दूसरा मुद्दा:

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' 

     } 
    }) 
    } 

उत्तर

13

आप एक शब्दकोश लौटने की योजना बना रहे हैं तो आप कुंजी और इसके डेटा का प्रकार निर्दिष्ट करने की जरूरत है।

उदाहरण के लिए:

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

आप इसे में या यदि डेटा के बारे में सुनिश्चित करें कि आप डेटा के कई प्रकार नहीं कर रहे हैं, परिवर्तन: अपने कुंजी और मान दोनों स्ट्रिंग्स तो आप की तरह कुछ लिख सकते हैं कर रहे हैं Dictionary से NSDictionary पर वापसी का प्रकार।

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

या

आप की तरह लिख सकते हैं:

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

धन्यवाद! इसने पहली त्रुटि हल की लेकिन अब मुझे एक संदेश मिल रहा है कि 'NSDictionary' 'शून्य' में परिवर्तनीय नहीं है। आपको क्या लगता है यहाँ हुआ? –

+0

@ user1851782: आपको त्रुटि कहाँ मिली? और अब आप किस कोड का उपयोग कर रहे हैं? –

+0

@ user1851782: यह डाउनलोड करने के कारण है 'डाउनलोड टास्क: NSURLSessionDownloadTask = sharedSession.downloadTaskWithURL (forecastURL !, completHandler: {(स्थान: NSURL !, प्रतिक्रिया: NSURLResponse !, त्रुटि: NSError!) -> शून्य में इसका प्रकार शून्य है और यह है एक एसिंक्रोनस कॉल –

संबंधित मुद्दे

 संबंधित मुद्दे