如何使用完成处理程序?

时间:2019-12-01 21:18:01

标签: ios swift completionhandler

在此代码块中,当我在readData块中打印问题数组时,它会打印从函数返回的数据,但仅当它退出该块并尝试在该块外打印时,该数组为空

if keyword.lowercased().contains("abdominal distention"){
            readData(id: "1", userCompletionHandler: {data, error in
                self.questionsArray = data
                print("Questions Array inside the block: \(self.questionsArray)")
            })
            print("Questions Array outside the block: \(questionsArray)")
            //print("Abdominal Distention")
            return true
        }

这是readData方法:

func readData(id: String, userCompletionHandler: @escaping ([String], Error?) -> Void){
        let request = NSMutableURLRequest(url: NSURL(string: "http://adminsapi.somee.com/Api/Test/?id=\(id)")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0)
        request.httpMethod = "GET"

        var questionsArr = [String]()
        let session = URLSession.shared
        let dataTask = session.dataTask(with: request as URLRequest, completionHandler: {data, response, error in
            if response != nil {
                //print("Response: \(response!)")
            }
            if let data = data {
                do{
                    let obj = try JSONDecoder().decode([Questions].self, from: data)
                    for question in obj{
                        questionsArr.append(question.question)
                    }
                    userCompletionHandler(questionsArr, nil)
                } catch{
                    print("Error in retrieving data: \(error)")
                }
            }
            else{
                print("Error: \(String(describing: error))")
            }
            })
        dataTask.resume()
    }

也许问题出在完成处理程序块上,我真的不知道

0 个答案:

没有答案