尝试从GET请求中检索数据

时间:2017-01-30 18:49:36

标签: ios swift networking get alamofire

我试图通过Alamofire提出GET请求并期望返回数据。当我在我的Viewcontroller中初始化我的Data类时,它工作正常,如

 let dataRequest = DataClass()

然后调用我的函数来获取GET数据,但当我尝试将其声明为

 let dataRequest: DataClass!

并尝试调用GET函数 它说意外地发现没有。

我强行解包而不是初始化的原因是因为在我的数据类中,我有一个像init这样的init函数(address:String,Zip:Double)。

我会分享我的课程,所以也许有人可以给我一些见解,为什么它的回归为零。

class FirstViewController {
var dataRequest: DataClass!

   override func viewDidLoad() {
    super.viewDidLoad()

   dataRequest.downloadData { // Returns nil at this point
    let initData = DataClass(dataRequest._address)


}

 }
}

DataClass

Class DataClass {
var _address: String!
 init(address: String) {
 _address = address
 }
func downloadProperties(completed: @escaping downloadComplete) {
    Alamofire.request(Listings).responseJSON { response in
        if let result = response.result.value {
            let dict = JSON(result)
            if let data = dict["data"].dictionary {

                if let listingResultDict = data["listings"]?.array  {

                    for list in listingResultDict {

                        if let propertyAddress = list["data"]["name"].string {
                            self._address = propertyName
                        }
                      }
                    }
                  }
                }
              complete()
             }
           }

    }

康斯坦斯

typealias downloadComplete = () -> ()

如果需要进一步澄清,请告诉我。

2 个答案:

答案 0 :(得分:1)

您从未在FirstViewController中初始化DataClass!

执行let dataRequest = DataClass()不会初始化它。它基本上告诉编译器你保证这个值不是nil并且不是可选的。

你仍然必须给它一个初始值..这就是为什么当你这样做:

let dataRequest: DataClass! = DataClass()它有效(在这种情况下,dataRequest可能是可选的)。你也可以这样做:var parseString = require('xml2js').parseString; var DOMParser = require('xmldom').DOMParser; var xmlString = "<test>some stuff </test>"; var xmlStringSerialized = new DOMParser().parseFromString(xmlString, "text/xml"); parseString(xmlStringSerialized, function (err, result) { if (err) { //did not work } else { //worked! use JSON.stringify() var allDone = JSON.stringify(result); } }); 告诉编译器它不会是nil并且会有一个初始值。

答案 1 :(得分:0)

您尚未初始化

Id

在致电

之前
dataRequest

你应该添加

dataRequest.downloadData { ... }

这就是为什么它返回零值