我可以在一个UIViewcotroller中设置一个ModelClass并阅读ModelClass'来自另一个使用swift3 iOS的UIViewCotroller的对象?

时间:2017-07-27 06:31:08

标签: ios swift3 jsonmodel object-model

我试图学习如何在swift3中使用ClassModel,因为我找不到合适的教程来理解基本概念,我提到太多的网站并成功创建了一个模型类和将值设置为模型类'来自样本的对象解析了JSON值。

我的模特课是,

import UIKit
import SwiftyJSON

class TrainObject {


    var towards: String!
    var lastUpdated: String!
    var delay: String!
    var trainName: String!
    var lastLocation: String!
    var trainNo: String!
    var upcomingStationInfo: String!


    required init(json: JSON) {

        lastUpdated = json["lastUpdated"].stringValue
        trainName = json["trainName"].stringValue        

    }

}

现在从ListViewController(UIViewController)的viewdidload,我使用Alamofire从URL解析JSON,并使用代码将结果设置为模型类,

 if let results = json["info"]["trainData"].array {
            print(results)
            for entry in results {
                self.items.append(TrainObject(json: entry))
            }
            print(self.items)


            let user = self.items[0]
            print(user.trainName)
            self.tableOfInfo?.reloadData()
        }

此外,从ListViewController的tableview委托中,我逐个获取数组值,以便在tableview中加载,例如,

            let user = self.items[indexPath.row]
            print(user.trainName)
            print(user.delay)

现在在tableview选择中,我可以使用通常的代码将适当的值传递给另一个名为DetailsViewController的UIViewController。我的问题是,有没有办法直接从DetailsViewController访问模型类(TrainObject),然后使用选定的indexpath.row值,获取相应的数组?或者我应该从tableview的didselectrow方法传递数组本身?我在这里感到困惑你能解释一下模特课的真正用途吗?我应该如何以及在何处实际使用它?

1 个答案:

答案 0 :(得分:0)

当用户选择tableview上的特定项目时,您应该从数组中获取该项目。并获取DetailViewController的实例并将所选项目传递给该实例。

例如:

class DetailViewController: UIViewController {

   var selectedTrain : TrainObject?

  override func viewDidLoad() { 
    if let selectedTrain = selectedTrain {
       // Selected train not nil.
    }
    super.viewDidLoad()
  }


}

class ListViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {


    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let selectedTrain = self.items[indexPath.row]

        let detailViewController = // Fetch the instance from Storyboard 

        detailViewController.selectedTrain = selectedTrain

        //Push the detail view controller or present it modally. 

    }

}