Я пытаюсь реализовать асинхронную функцию, как сказал 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()
}
Любой намек на то, что я могу делать неправильно?
Ошибки компилятора Swift часто бывают ужасными и запутанными. Предположим, что ошибка означает «Derp? Что-то не так!» и особенности не имеют смысла. Затем найдите ошибку, как вы это сделали. –