Birincisi, requestThing
, ()
'u (yani geçersiz) ve String
'u döndürmez. Yani şu ifadenin türü de ()
değil String
geçerli:
API.requestThing { string in
return string
}
İkincisi, requestThing
çağrısı, var vücut işlevine çağrı hala tembel var olarak name
tanımlanan bu yüzden bile, asenkron olduğunu synchronous
ve hemen geri dönecektir. Eğer alınan değeri önbelleğe almak istiyorum
func name(completion: String ->()) {
API.requestThing { string in
completion(string)
}
}
// Later you call it in this way
myItem.name { name in
// use the value of name
}
ek olarak eğer bir class
için Item
değiştirmek ve aşağıdaki kodu
class Item {
private var nameValue: String?
func name(completion: String ->()) {
if let value = nameValue {
// return cached value
return completion(value)
} else {
// request value
API.requestThing { string in
// cache retrieved value
self.nameValue = string
// return retrieved value
completion(string)
}
}
}
}
kullanabilirsiniz:
Yani böyle bir fonksiyonu haline name
dönüştürebilir eğer
Xcode ne dedi? – Tim
Belirli bir hata vermez, ancak bunu da derleyemez. –
API'yi sadece bir kez aramak ve sonucu önbelleğe almak istiyor musunuz? Aksi halde API'yi her seferinde çağırıyorsunuz. –