Как запросить страницу php и сохранить значение, которое она мне возвращает? - PullRequest
0 голосов
/ 17 апреля 2019

Цель приложения, встроенного в Swift, - прочитать значение, отправить его на страницу php, которая возвращает значение, соответствующее URL-адресу.Впоследствии этот URL будет установлен в веб-представлении для отображения.

В настоящее время мое приложение отправляет значение, и я могу получить 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
    }

1 Ответ

0 голосов
/ 17 апреля 2019

Вы можете использовать замыкания:

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)
}

Документация разработчика Apple

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...