2015-09-27 49 views
0

返回值我有一个函数:不能调用非功能型“JSON”的价值,如何从块斯威夫特

func connectToWS(callback: (JSON)) -> Void { 
    let urlPath: String = "http://xxx.webservice.com" 
    let url: NSURL = NSURL(string: urlPath)! 
    let request: NSURLRequest = NSURLRequest(URL: url) 

    let session = NSURLSession.sharedSession() 
    let task = session.dataTaskWithRequest(request){ 
     (data, response, error) -> Void in 
     if error != nil { 

     } else { 
      let json:JSON = JSON(data: data!) 
      // RETURN? 
     } 
    } 
    task.resume() 
} 

所有我想要做的是返回的NSDictionary JSON序列字典,当我调用这个函数。但似乎我不能,因为我的JSON数据在dataTaskWithRequest块中。我已经使用回拨尝试,但它显示了错误:

Cannot call value of non-function type 'JSON' 

任何人都可以点我的方向来解决这个问题?

我正在使用SwiftyJSON作为第三方库。

回答

2

尝试了这一点:

func connectToWS(callBack: ((data: NSData!, response: NSURLResponse!, error: NSError!) -> Void)?) { 
    let urlPath: String = "http://xxx.webservice.com" 
    let url: NSURL = NSURL(string: urlPath)! 
    let request: NSURLRequest = NSURLRequest(URL: url) 
    let session = NSURLSession.sharedSession() 

    let task = session.dataTaskWithRequest(request) { data, response, error in 
     callBack?(data: data, response: response, error: error) 
     return 
    } 

    task.resume() 
} 

然后调用此类似:

connectToWS() { data, response, error in 
    if error != nil { 
     if error.domain == NSURLErrorDomain && error.code == NSURLErrorTimedOut { 
      print("timed out") // note, `response` is likely `nil` if it timed out 
     } 
    } 
} 
+0

感谢您的帮助。只是最后一个问题: 是connectToWS(){数据,在一个块中的响应错误? –

+0

是的。它的“封闭”更精确。如果'closure'是该函数的唯一参数,那么这就是你如何编写它的方法。 – Abhinav