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

标签 swift

我是 swift 新手,完全迷失了 HTTP Post 请求的函数顺序和 task.resume 句柄。

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

我遇到的问题是:

  1. 我无法访问 URLSession 请求中的 siteList。它要求我将其分配为 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 数组>,从代码中删除它,应该没问题。

关于swift - 从 POST 请求 Swift 将数据传递回主类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47614151/

相关文章:

swift - 从数组中提取静态图像

swift - 如何使用 Swift 在散点图上添加符号

ios - 标签的 UITest 颜色(不是 UI 标签)

swift - 在 iOS 10 的堆栈 View 中隐藏 View

ios - ImageView 中的图像不显示在 Label 后面?

ios - 登录其 View 不在窗口层次结构中的 ViewController!在 Appdelegate 中

ios - UIImagePickerController swift 的问题

ios - 当用户导航更深时,UINavigationBar 将变为透明

ios - Pod 更新后找不到“Parse/PFFile.h”文件

ios - Swift:出现神秘约束