Class swift使用类实例实现变量

Class swift使用类实例实现变量,class,swift2,viewcontroller,Class,Swift2,Viewcontroller,我的目标是首先在视图控制器中实现一个带有json数据的viewtable。 然后在另一个viewcontroller中,我想从表中选择一些记录来查看 我的第一班路线在上面 class Route { var id: Int? var travelTimeSeconds: Int? var condition:String? var lastUpdate:String? var title:String? var backup = [Route]() init(json: NSDictio

我的目标是首先在视图控制器中实现一个带有json数据的viewtable。 然后在另一个viewcontroller中,我想从表中选择一些记录来查看

我的第一班路线在上面

class Route {

var id: Int?
var travelTimeSeconds: Int?
var condition:String?
var lastUpdate:String?
var title:String?

var backup = [Route]()


init(json: NSDictionary) {
    self.id = json["id"] as? Int
    self.travelTimeSeconds = json["travelTimeSeconds"] as? Int
    self.condition = json["condition"] as? String
    self.lastUpdate = json["lastUpdate"] as? String
    self.title = json["title"] as? String
}

init(){}

func findRoutes(predferedroute:String)->[Route] {

    let jsonurl = NSURL(string: predferedroute)!

    let task = NSURLSession.sharedSession().dataTaskWithURL(jsonurl) { (data,response, error) -> Void in

        dispatch_async(dispatch_get_main_queue(), { () -> Void in

            if let urlcontent = data {

                do{

                    let jsonresult =   try  NSJSONSerialization.JSONObjectWithData(urlcontent, options: NSJSONReadingOptions.MutableContainers)



                    if let routeArray = jsonresult["result"] as? [NSDictionary] {

                        for item in routeArray {
                            self.backup.append(Route(json: item))
                        }//end for

                    }//end if


                }//end do
                catch {

                    print("Serialization error")

                }//end catch

            }//end if

        })//end dispatch
    }//end task
    task.resume()
    return self.backup
}//end findRoutes
} 在第一个视图中,我编写了以下代码

class MenuPageViewController: UIViewController{


var routes = [Route]()

var implementroutes = Route()

var allroutes:String = "http://quickweb.gr/itsweb/webservices/json?op=GetAll"

var activeRoutes:String = "http://quickweb.gr/itsweb/webservices/json?op=GetActive"


override func viewDidLoad() {
    super.viewDidLoad()

    NSUserDefaults.standardUserDefaults().setObject("palios55", forKey: "StartUp")

    let nickname1 = NSUserDefaults.standardUserDefaults().objectForKey("StartUp")!


    print(nickname1)

  routes = implementroutes.findRoutes(allroutes)

    routes = implementroutes.backup



}//end viewload



override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

表视图的其他代理可以工作 但两种代码的路线仍然为零:

routes=implementroutes.findRoutes(所有路由) routes=routes.backup

我是否错过了ViewController和类的某些功能?
如果我直接在tableview中使用相同的代码,它就可以工作。

您遗漏了“async”一词。您的
findrootes
方法将在执行
task
之前返回。添加一些日志消息以查看事件发生的顺序。是,这会发生。但是,当我从viewDidLoad中使用out方法时,效果很好。我不知道这些实例是否出了问题