2015-08-12 8 views
0

Я пытаюсь реализовать асинхронную функцию, как сказал in this topic, но я всегда получаю следующее сообщение об ошибке от Xcode: Type 'dispatch_queue_t!' does not conform to protocol 'OS_dispatch_queue'Swift не соответствует протоколу «OS_dispatch_queue»

Вот мой код:

@IBAction func buyButton(sender: AnyObject) { 

// get wanted symbol 
let symbol = symbolField.text! 

// get price of share 
var priceShare :Double = 0 
_ = lookup(symbol) { name, symbol, price in 
    dispatch_async(dispatch_get_main_queue()) { 
     priceShare = price 
     } 
} 
buy(symbol, number: 1, price: priceShare) 

} 

Вот функция поиска:

func lookup(entry : NSString, completion: ((name :String, symbol :String, price :String) -> Void)) { 

// define return values 
var name = String() 
var symbol = String() 
var price = String() 

// define URL 
let url = NSURL(string: "http://yahoojson.gobu.fr/symbol.php?symbol=\(entry)")! 

let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) in 
    if let urlContent = data { 
     do { 
      let jsonResult = try NSJSONSerialization.JSONObjectWithData(urlContent, options: NSJSONReadingOptions.MutableContainers) 

      name = jsonResult["name"] as! String 
      symbol = jsonResult["symbol"] as! String 
      price = jsonResult["price"]!!.stringValue as String 
      completion(name: name, symbol: symbol, price: price) 
     } catch { 
      print(error) 
     } 
    } 
} 

// run the task 
task.resume() 

} 

Любой намек на то, что я могу делать неправильно?

ответ

0

Я сам это выясняю. В моем коде была ошибка.

На линии

priceShare = price 

мне нужно было поставить

priceShare = Double(price)! 

priceShare поскольку требуют двойного. Не понимаю, почему Xcode не сказал мне об этом.

+0

Ошибки компилятора Swift часто бывают ужасными и запутанными. Предположим, что ошибка означает «Derp? Что-то не так!» и особенности не имеют смысла. Затем найдите ошибку, как вы это сделали. –