2017-07-27 106 views
1

我想學習在swift3中使用ClassModels,因爲我找不到合適的教程來理解基本概念,我提到了太多的網站,併成功地創建了模型類併爲模型設置了值類的對象從樣本解析的JSON值。我可以在一個UIViewcotroller中設置ModelClass並使用swift3 iOS從另一個UIViewCotroller讀取ModelClass的對象嗎?

我的模型類,

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並使用代碼設置的結果傳送給模型類,解析JSON從URL

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方法傳遞數組本身?我在這裏感到困惑你能解釋一下模型類的真正用途嗎?我應該如何以及在哪裏使用它?

+0

其[TrainObject]和傳遞單個對象可以使用TrainObject到其他的viewController –

+0

可以請你的代碼解釋你的ListView? – swiftDevStart

+0

確保您要將選定的索引數據傳遞給detailViewController?來自[TrainObject] –

回答

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. 

    } 

} 
+0

謝謝!我明白如何從你的答案中使用它。 – swiftDevStart

相關問題