如何从RESTAPI GET请求返回值?

如何从RESTAPI GET请求返回值?,api,swift3,get,Api,Swift3,Get,我对swift和iOS开发基本上是新手,所以如果这个问题很愚蠢,请原谅,但我似乎无法让我的函数从API get请求返回结果。 我在朋友的计算机上运行Microsoft SQL server,并通过DreamFactory远程访问它。DreamFactory正在为SQL查询创建和管理API。我在本地主机上托管DreamFactory API web服务器,并通过iOS应用程序访问它 这就是我目前所拥有的 func validId() -> Bool { var queryId: In

我对swift和iOS开发基本上是新手,所以如果这个问题很愚蠢,请原谅,但我似乎无法让我的函数从API get请求返回结果。 我在朋友的计算机上运行Microsoft SQL server,并通过DreamFactory远程访问它。DreamFactory正在为SQL查询创建和管理API。我在本地主机上托管DreamFactory API web服务器,并通过iOS应用程序访问它

这就是我目前所拥有的

func validId() -> Bool {
    var queryId: Int = 0 // just for testing

    let table = "SM.Customers"
    // this url looks like ( http://localhost:8080/api/v2/db/_table/SM.Customers/1989/?api_key=065dce537)
    let url = URL(string: "\(urlString)\(table)/\(self.id)?api_key=\(self.api_key)")!

    URLSession.shared.dataTask(with: url, completionHandler: {
        (data, response, error) in
        if(error != nil){
            print(error.debugDescription)
        }else{
            do{
                self.userData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String: AnyObject]
                OperationQueue.main.addOperation {
                    queryId = self.userData["CustId"] as! Int
                    print(queryId)
                }

            }catch let error as NSError{
                print(error)
            }
        }



    }).resume()


    return (String(queryId) == self.id)

}
我可以使用从
db
中提取的数据在
OperationQueue.main.addOperation{…}
下执行操作,但我不能真正返回值或将值分配给
任务
代码块之外的变量。此函数将
打印(queryId)
1989
,但它将返回
false
,因为它正在读取
(字符串(queryId)=self.id)
(0==1989)


有什么办法可以解决这个问题吗?

返回语句是在
dataTask
的完成块之前执行的,因此您需要将完成处理程序与函数
validd
一起使用,检查此语句以生成完成处理程序感谢您的评论。但是如何在
validId
函数中返回
bool
?这个例子无法解释。我已经可以更新
OperationQueue.main.addOperation{…}
中的UI元素,我想要的是返回一个值。您不能从这个validId函数返回任何值,因为它正在进行异步调用,您需要的是用您的函数
validId
创建完成块,就像建议的解决方案一样。