首页 > 解决方案 > 如何查询一个php页面并保存它返回给我的值?

问题描述

在 Swift 中构建的应用程序的目的是读取一个值,将其发送到一个 php 页面,该页面返回一个与 url 对应的值。随后这个 url 将被设置在 webView 中以显示。

目前我的应用程序发送值,我可以获取字符串格式的 url。我的问题是,如果我在 URLSession.shared.dataTask 进程之外使用该变量,则该变量为空。

上网搜了一下,发现是因为操作是在另一个线程中进行的,那如何保持那个值的持久化呢?

我正在快速开发 4.2

func risolutoreIndirizzo() -> String {
        var addressURL:String = ""

        let domain = "https://mywebsite.com/"
        let domain = "getUrl.php"
        print("URL -> \(domain+domain)")
        let request = NSMutableURLRequest(url: NSURL(string: domain+domain)! as URL)
        request.httpMethod = "POST"
        let nameDB = "SVILUPPO"
        let postString = "StringaAccesso=\(nameDB)"

        request.httpBody = postString.data(using: String.Encoding.utf8)

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

            if error != nil {
                print("error=\(String(describing: error))")
                return
            }

            //print("response = \(response)")
            let responseString:String! = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) as String?

            print("responseString = \(String(describing: responseString))")
            print("---------------------------------")

            let arrayResponse = responseString.split(separator: ",")
            //print(arrayResponse[0])
            addressURL = arrayResponse[0].split(separator: ":")[1] + ":" + arrayResponse[0].split(separator: ":")[2]

            print("AddressURL -> " + addressURL)//Here I see correctly -> https://mywebsite.com/privateProject 

            stringURl = addressURL //stringURl initialized at the beginning of the code



        }
        task.resume()

        print("URL -> " + stringURl)//Here the variable is empty

        return addressURL
    }

标签: swift

解决方案


您可以使用闭包:

func risolutoreIndirizzo(completion: @escaping (_ result: String) -> Void) {
    ...
    let task = URLSession.shared.dataTask(with: request as URLRequest) {
        data, response, error in
        ...
        completion(addressURL)
    }
    ...
}

利用:

risolutoreIndirizzo() { address in
    print(address)
}

苹果开发者文档


推荐阅读