Swift 多个请求 return 相同的结果
Swift multiple requests return the same result
我正在对 API 进行同步 api 调用,在调试器中我发现我得到了不同的结果。但是我的代码总是 returns 相同的 Id:
func fetchIDbySKU(name: String, color: String) -> Data{
let sku = name + ":" + color
let appendedsku = (sku).addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let url: String = "https://www.link.com/wp-json/wc/v1/products?sku=" + appendedsku!
let semaphore = DispatchSemaphore (value: 0)
var result = Data()
var request = URLRequest(url: URL(string: url)! ,timeoutInterval: Double.infinity)
request.addValue("Basic secret token", forHTTPHeaderField: "Authorization")
request.httpMethod = "GET"
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
return
}
print(String("______________________________________"))
print(String(data: data, encoding: .utf8)!)
result = data
print(String("______________________________________"))
semaphore.signal()
}
task.resume()
semaphore.wait()
return result
}
所以结果总是 return 相同的结果,即使我在控制台中看到响应数据不同。
这是我期待 return:
的代码
var request_data = fetchIDbySKU(name: name, color: color_name)
var product_id = String(request_data[0])
parts_list.append(Item(product_id: product_id, quantity: quantity))
每次调用该函数时,您的信号量都会被初始化。只需从函数中取出信号量的初始化,它就可以正常工作。
let semaphore = DispatchSemaphore (value: 0)
func fetchIDbySKU(name: String, color: String) -> Data{
let sku = name + ":" + color
let appendedsku = (sku).addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let url: String = "https://www.link.com/wp-json/wc/v1/products?sku=" + appendedsku!
var result = Data()
var request = URLRequest(url: URL(string: url)! ,timeoutInterval: Double.infinity)
request.addValue("Basic secret token", forHTTPHeaderField: "Authorization")
request.httpMethod = "GET"
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
return
}
print(String("______________________________________"))
print(String(data: data, encoding: .utf8)!)
result = data
print(String("______________________________________"))
semaphore.signal()
}
task.resume()
semaphore.wait()
return result
}
我正在对 API 进行同步 api 调用,在调试器中我发现我得到了不同的结果。但是我的代码总是 returns 相同的 Id:
func fetchIDbySKU(name: String, color: String) -> Data{
let sku = name + ":" + color
let appendedsku = (sku).addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let url: String = "https://www.link.com/wp-json/wc/v1/products?sku=" + appendedsku!
let semaphore = DispatchSemaphore (value: 0)
var result = Data()
var request = URLRequest(url: URL(string: url)! ,timeoutInterval: Double.infinity)
request.addValue("Basic secret token", forHTTPHeaderField: "Authorization")
request.httpMethod = "GET"
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
return
}
print(String("______________________________________"))
print(String(data: data, encoding: .utf8)!)
result = data
print(String("______________________________________"))
semaphore.signal()
}
task.resume()
semaphore.wait()
return result
}
所以结果总是 return 相同的结果,即使我在控制台中看到响应数据不同。
这是我期待 return:
的代码var request_data = fetchIDbySKU(name: name, color: color_name)
var product_id = String(request_data[0])
parts_list.append(Item(product_id: product_id, quantity: quantity))
每次调用该函数时,您的信号量都会被初始化。只需从函数中取出信号量的初始化,它就可以正常工作。
let semaphore = DispatchSemaphore (value: 0)
func fetchIDbySKU(name: String, color: String) -> Data{
let sku = name + ":" + color
let appendedsku = (sku).addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let url: String = "https://www.link.com/wp-json/wc/v1/products?sku=" + appendedsku!
var result = Data()
var request = URLRequest(url: URL(string: url)! ,timeoutInterval: Double.infinity)
request.addValue("Basic secret token", forHTTPHeaderField: "Authorization")
request.httpMethod = "GET"
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
return
}
print(String("______________________________________"))
print(String(data: data, encoding: .utf8)!)
result = data
print(String("______________________________________"))
semaphore.signal()
}
task.resume()
semaphore.wait()
return result
}