将数据从POST传递回主类变量请求Swift

我对swift很陌生,完全按照函数顺序和HTTP POST请求的task.resume的句柄丢失。将数据从POST传递回主类变量请求Swift

所以我在我的班级中有一个名为“siteList”的变量。 我试图然后运行一个函数来将JSON数据填充到siteList数组中。 JSON数据来自POST REQUEST。

我遇到的问题是:

  1. 我无法访问URLSession请求中的站点列表。它要求我将它分配为self.siteList,它不会在类级别将值传递回siteList。
  2. 我可以在函数外使用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()

}

}

回答:

这里的问题在do声明中,您每次使用self.siteList = [Site]()创建一个空的siteList阵列,将其从代码中删除,应该没问题。

以上是 将数据从POST传递回主类变量请求Swift 的全部内容, 来源链接: utcz.com/qa/259028.html

回到顶部