我是新手,完全不了解HTTP发布请求的功能和task.resume的顺序。
因此,我的课堂上有一个名为“ siteList”的变量。
我试图然后运行一个函数以将JSON数据填充到siteList数组中。 JSON数据来自POST REQUEST。
我遇到的问题是:
我无法在URLSession请求中访问siteList。要求我将其分配为self.siteList,该值不会在类级别将值传递回siteList。
我可以在函数外部使用siteData变量,因为它是在快速文件级别声明的,但是问题是我似乎无法正确获得函数顺序。换句话说,当我尝试在task.resume()之后打印siteData时,它仍然返回空。
我尝试将其分为两个函数,一个函数获取流程POST请求并获取siteData,另一个函数将siteData传递给siteList变量,并使用完成处理程序。但是问题在于,第二个函数必须再次成为self.functionName,这基本上使得该值可以在类级别访问。
我确定我可能在这里丢失了一些东西,但是我完全迷路了。我已经花了几个小时,似乎找不到解决方案...
任何帮助,将不胜感激..
代码如下:
var siteData = NSArray()
class SiteListManager: NSObject {
var siteList=[Site]()
let category = GlobalConstants.kCat
let keyword = GlobalConstants.kKeyword
let latitude = GlobalConstants.kLat
let longitude = GlobalConstants.kLong
// MARK: - init
override init() {
super.init()
getSiteList(category: category, keyword:keyword, latitude:latitude, longitude:longitude)
}
func getSiteList(category: String, keyword: String, latitude: String, longitude: String) {
let myUrl = URL(string: "http://www.goseesa.org.php7-34.ord1-1.websitetestlink.com/sites/list");
var request = URLRequest(url:myUrl!)
request.httpMethod = "POST"// Compose a query string
let postString = "keyword="+category+"&cid="+keyword+"&lat="+latitude+"&long="+longitude
request.httpBody = postString.data(using: String.Encoding.utf8);
let task = URLSession.shared.dataTask(with: request, completionHandler: { (data: Data?, response: URLResponse?, error: Error?) in
do {
siteData = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! NSArray
let kTotalSites = siteData.count
self.siteList = [Site]()
// Now we can access value of First Name by its key
//let siteList = parseJSON["user"] as? NSDictionary
for i in 0..<kTotalSites {
let siteContent = siteData[i] as! NSDictionary
let name = siteContent.value(forKey: "name") as! String
//load site information
let site = Site(name: name)
self.siteList.append(site)
}//end of compiling site list
}catch {
print(error)
}
})
task.resume()
}
}
最佳答案
这里的问题是,在do
语句内部,每次使用siteList
创建一个空的self.siteList = [Site]()
数组,将其从代码中删除,就可以了。
关于swift - 从POST请求Swift将数据传递回主类变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47614151/