当前位置: 首页 > 知识库问答 >
问题:

在Swift中从web调用获取值[重复]

范凡
2023-03-14

我试图从Swift中的PHP脚本中获得返回的值。然而,我似乎不断地得到错误:

var value: String!

func run(idNumber: Int) {
    let request = NSMutableURLRequest(url: URL(string: "https://mywebsite.com/file.php")!)
    request.httpMethod = "POST"
    let postString = "a=Hello"
    request.httpBody = postString.data(using: String.Encoding.utf8)

    let task = URLSession.shared.dataTask(with: request as URLRequest) {
        data, response, error in

        if error != nil {
            //answer = error;
        }

        let answerString = String(data: data!, encoding: String.Encoding.utf8)
        self.value = answerString
    }
    task.resume()
}

func getValue() -> String{
    return value
}

当调用getvalue()函数时会发生错误。然而,当我一创建“answerString”就打印出来时,它就成功地打印出来了!

在这里调用函数:

let access = ApiAccess()
access.run(idNumber: 0)
print(access.getValue())

共有1个答案

邓业
2023-03-14

发出请求是一项异步任务。在调用getvalue之前,需要等待闭包回调被调用。

可以向run方法添加闭包回调。这样,您将知道请求何时完成,并可以打印结果:

var value: String!

func run(idNumber: Int, @escaping callback: () -> Void) {

    let request = NSMutableURLRequest(url: URL(string: "https://mywebsite.com/file.php")!)
    request.httpMethod = "POST"
    let postString = "a=Hello"
    request.httpBody = postString.data(using: String.Encoding.utf8)

    let task = URLSession.shared.dataTask(with: request as URLRequest) {
        data, response, error in

        if error != nil {
            //answer = error;
        }


        let answerString = String(data: data!, encoding: String.Encoding.utf8)
        self.value = answerString
        callback()

    }
    task.resume()

}

func getValue() -> String{
    return value
}

let access = ApiAccess()
access.run(idNumber: 0) {
   print(access.getValue())
}
 类似资料:
  • 问题内容: 如何从CVPixelBufferRef获取RGB(或任何其他格式)像素值?香港专业教育学院尝试了许多方法,但没有成功。 问题答案: 是不安全的可变指针,或更确切地说是。将指针转换为更特定的类型后,即可轻松访问内存: 确保使用正确的类型(8、16或32位unsigned int)。这取决于视频格式。最有可能是8位。 缓冲区格式的更新: 您可以在初始化实例时指定格式。您基本上可以选择: B

  • 问题内容: 我使用WKWebView登录到一个网站,现在我想解析该网站的html。如何快速访问HTML网站?我知道它如何用于UIWebView但不适用于WKWebView。 谢谢你的帮助! 问题答案: 如果您等到页面加载完毕,则可以使用: 您还可以注入一些JavaScript,使您返回HTML。 您可以注入的javascript如下所示:

  • 我想让对话框片段(DialogFragment)向我返回一个值,该值是在退出时在编辑数量(editQuantity)中输入的。 但我没有办法让它发挥作用。我可以通过将值传递给intent来实现这一点,但这会破坏当前活动的进度。 除了传递意图之外,还有什么方法可以返回我的值吗?

  • 假设我有以下代码: 是否有一种方法可以得到下面的数组?

  • 我有以下字符串:

  • 考虑这个代码 我做了一个包装器来延迟的方法调用是否有办法从setTimeout内部的回调中检索值,即从?