我可以在一个 UIViewcotroller 中设置一个 ModelClass 并使用 swift3 iOS 从另一个 UIViewCoroller 读取 ModelClass 对象吗?

Posted

技术标签:

【中文标题】我可以在一个 UIViewcotroller 中设置一个 ModelClass 并使用 swift3 iOS 从另一个 UIViewCoroller 读取 ModelClass 对象吗?【英文标题】:Can I set a ModelClass in one UIViewcotroller and read the ModelClass' object from another UIViewCotroller using swift3 iOS? 【发布时间】:2017-07-27 06:31:08 【问题描述】:

我正在尝试学习在 swift3 中使用 ClassModels,因为我找不到合适的教程来理解基本概念,所以我参考了太多网站并成功创建了一个模型类并将值设置为来自示例解析 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)

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

【问题讨论】:

您的 listView 具有 [TrainObject] 并且要将单个对象传递给您可以使用 TrainObject 到另一个 viewController 能用代码解释一下吗? 确定要将选定的索引数据传递给 detailViewController 吗?来自 [TrainObject] 【参考方案1】:

当用户在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. 

    


【讨论】:

谢谢!我从您的回答中了解了如何使用它。

以上是关于我可以在一个 UIViewcotroller 中设置一个 ModelClass 并使用 swift3 iOS 从另一个 UIViewCoroller 读取 ModelClass 对象吗?的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在 -applicationWillTerminate 方法中设置一个计时器吗?

我可以在 Visual Studio 中设置 LARGEADDRESSAWARE 吗?

仅当实体尚不存在时,我是不是可以在 CloudFormation 中设置属性?

我不想在选择标签中设置第一个选项的状态怎么做任何人都可以帮助我

您可以在 aws 中设置默认控制台区域吗?

我可以在 Azure 集成运行时警报中设置时间范围吗?