swift - 如何查询一个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
}
解决方案
您可以使用闭包:
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)
}
推荐阅读
- macos - SwiftUI 2 - 如何防止顶部部分在 macOS 和 iPadOS 的列表中关闭
- typescript - 如何转换或投射部分
到 T - docker - 命令 /bin/sh -c gradle run 返回一个非零代码:127
- php - 验证失败后返回上一页(Laravel)浏览器按钮
- python - Python groupby 将数据框变成一个奇怪的对象
- node.js - NodeJS - 使用 require 工程导入不起作用
- c# - 选项卡式 Windows 窗体 C#
- python-3.x - 如何发送角色名称?
- php - 我如何在后台 php 中运行 ffmpeg 命令
- variables - Ansible如何为额外的变量值分配新值