Swift 3功能(完成问题

时间:2017-03-08 02:03:22

标签: ios swift3

我有以下代码来创建一个解析一些json数据的函数。

func getTrackData(completed: @escaping DownLoadComplete) {
    let getDataURL = URL(string: "https://tfmx-3ba7c.firebaseio.com/")!
    Alamofire.request(getDataURL).responseJSON { response in
        let result = response.result

        if let dict = result.value as? Dictionary<String, Any> {
            if let tr = dict["tracks"] as? Dictionary<String, Any> {
                if let name = tr["name"] as? String {
                if let trackId = tr["trackId"] as? Int {
                if let postcode = tr["postcode"] as? String {
                if let trackType = tr["trackType"] as? String {
                if let locId = tr["locId"] as? String {
                if let lon = tr["lon"] as? Double {
                if let lat = tr["lat"] as? Double {
                if let phoneNumber = tr["phoneNumber"] as? String {
                if let email = tr["email"] as? String {

                    for obj in tr {
                    let names = Tracks(name: name, trackId: trackId, postcode: postcode, trackType: trackType, locId: locId, lon: lon, lat: lat, phoneNumber: phoneNumber, email: email)
                    self.track.append(names)
                    }
                    self.tableView.reloadData()
                }
                }
                }
                }
                }
                }
                }
                }
                }
            }
        }
        completed()
    }
}

当我用

调用我的函数时
getTrackData()

我收到以下错误

在调用

中缺少参数'completed'的参数

它建议我添加

self.getTrackData(completed: <DownLoadComplete>)

但我不确定该怎么说

我在另一个viewcontroller上有一个类似的功能,它不需要我在括号中放任何东西,但是设置了相同的参数。

很困惑。

2 个答案:

答案 0 :(得分:3)

如果需要可选的完成闭包,请将其声明为可选:

func getTrackData(completed: DownLoadComplete?) {
}

并将函数内部的闭包调用为可选

completed?()

然后你可以在没有参数的情况下拨打getTrackData

答案 1 :(得分:-1)

我实际上已经废弃了这段代码,并实施了Firebase并使用了Firebase代码,后者更加整洁,速度更快。

感谢您的所有回复

相关问题