我试图通过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 = () -> ()
如果需要进一步澄清,请告诉我。
答案 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 { ... }
这就是为什么它返回零值