0
我對swift很陌生,完全按照函數順序和HTTP POST請求的task.resume的句柄丟失。將數據從POST傳遞迴主類變量請求Swift
所以我在我的班級中有一個名爲「siteList」的變量。 我試圖然後運行一個函數來將JSON數據填充到siteList數組中。 JSON數據來自POST REQUEST。
我遇到的問題是:
- 我無法訪問URLSession請求中的站點列表。它要求我將它分配爲self.siteList,它不會在類級別將值傳遞迴siteList。
- 我可以在函數外使用siteData變量,因爲它是在swift文件級聲明的,但問題是我似乎無法獲得正確的函數順序。換句話說,當我嘗試在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()
}
}
謝謝你的幫助!我現在得到這個工作與您的小費! – Judy
嘿@Judy請提出答案,謝謝! –