swift 3.0을 사용하고 정수 배열을 반환하는 함수를 만들었습니다. Integer 배열은 매우 구체적이며 데이터베이스에서 가져온 것이므로 HTTP 호출은 비동기입니다. 이것은 3 개의 다른 컨트롤러에서 사용하기 때문에 함수이므로 한 번 쓰는 것이 좋습니다. 내 문제는 비동기 코드는 return 문 다음에 반환되므로 nil을 반환한다는 것입니다. 여기에 예제를 시도했습니다 Waiting until the task finishes 그러나 값을 반환해야하기 때문에 주로 작동하지 않습니다. 이것은 내 코드입니다iOS swift 반환 값이 필요한 함수에서 비동기 작업을 수행하는 방법은 무엇입니까?
func ColorSwitch(label: [UILabel]) -> [Int] {
for (index, _) in label.enumerated() {
label[index].isHidden = true
}
// I need the value of this variable in the return
// statement after the async is done
var placeArea_id = [Int]()
let urll:URL = URL(string:ConnectionString+"url")!
let sessionn = URLSession.shared
var requestt = URLRequest(url: urll)
requestt.httpMethod = "POST"
let group = DispatchGroup()
group.enter()
let parameterr = "http parameters"
requestt.httpBody = parameterr.data(using: String.Encoding.utf8)
let task = sessionn.dataTask(with:requestt, completionHandler: {(data, response, error) in
if error != nil {
print("check check error")
} else {
do {
let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:Any]
DispatchQueue.main.async {
if let Profiles = parsedData?["Results"] as? [AnyObject] {
if placeArea_id.count >= 0 {
placeArea_id = [Int]()
}
for Profiles in Profiles {
if let pictureS = Profiles["id"] as? Int {
placeArea_id.append(pictureS)
}
}
}
group.leave()
}
} catch let error as NSError {
print(error)
}
}
})
task.resume()
group.notify(queue: .main) {
// This is getting the value however can't return it here since it
// expects type Void
print(placeArea_id)
}
// this is nil
return placeArea_id
}
내가 이미 확인했는데 값이 비동기 코드 내부로 반환되면 이제는 아무 것도 반환하지 않아도 좋습니다. 제안 사항은 훌륭합니다.
@Pabloprez 나중에 걱정을 – Asleepace