我有两个功能:
class ProductController: NSObject {
var products = [Product]()
func getData(){
let json = JSONParser()
let path = "http://localhost:8888/myApi/product/read.php"
json.getRequest(url: path) { (products) in
self.products = products
print("closure")
print(self.products)
}
}
func getPr() -> [Product]{
return self.products
}
}
我正在打电话:
let pc = ProductController()
pc.getData()
print(pc.getPr())
但pc.getData()
的来电始终是最后一次,所以我从[]
获得pc.getPr()
。如何在致电getData()
之前从getPr()
获取产品?
答案 0 :(得分:1)
您可以尝试完成
func getData(completion: @escaping (_ anyData: [Product]) -> Void) {
let json = JSONParser()
let path = "http://localhost:8888/myApi/product/read.php"
json.getRequest(url: path) { (products) in
self.products = products
print("closure")
print(self.products)
completion(products)
}
并像这样称呼它
pc.getData() { products in
print(products)
print(pc.getPr())
}
答案 1 :(得分:0)
当您执行HTTPRequest任务时,您的设备向您的服务器发送请求,然后设备等待服务器响应,同时服务器接收您的请求,处理并为您准备数据,之后它会向您发送响应和数据。因此,在您提出要求后,需要一些时间才能得到答复,而您永远不知道确切的时间 每当你在获得Response之后需要做一些任务时,你应该在完成处理程序中定义你的任务@Sh_Khan所说的。
除此之外,如果您想在变量数据更改后执行某些操作,可以使用Swift Property observers
didSet
和wilSet
EX(iswift.org):
var a : [Int] = [0,1,4]{
didSet{
print(a)
}
}
a = [10, 20, 30]
a.append(60)
输出:
[10, 20, 30]
[10, 20, 30, 60]