我可以在一个 UIViewcotroller 中设置一个 ModelClass 并使用 swift3 iOS 从另一个 UIViewCotroller 读取 ModelClass 的对象吗?
Can I set a ModelClass in one UIViewcotroller and read the ModelClass' object from another UIViewCotroller using swift3 iOS?
我正在尝试学习在swift3中使用ClassModels,由于找不到合适的教程来理解基本概念,我参考了太多网站并成功创建了一个模型class 并将值设置为模型 class' 来自样本解析的对象的 JSON 值。
我的模型 class 是,
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,并使用代码[=14] 将结果设置为模型 class =]
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 的表视图委托之外,我将数组值一一加载到表视图中,例如,
let user = self.items[indexPath.row]
print(user.trainName)
print(user.delay)
现在在选择表视图时,我可以使用常规代码将适当的值传递给另一个名为 DetailsViewController 的 UIViewController。我的问题是,有没有办法直接从 DetailsViewController 访问模型 class(TrainObject),然后使用选定的 indexpath.row 值,获取适当的数组?或者我应该从 tableview 的 didselectrow 方法传递数组本身吗?我在这里感到困惑你能解释一下模型 class 的真正用途是什么吗?我应该如何以及在哪里实际使用它?
当用户 select tableview
上的特定项目时,您应该从数组中获取项目。并获取 DetailViewController
的实例并将 selected 项目传递给该实例。
例如:
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.
}
}
我正在尝试学习在swift3中使用ClassModels,由于找不到合适的教程来理解基本概念,我参考了太多网站并成功创建了一个模型class 并将值设置为模型 class' 来自样本解析的对象的 JSON 值。
我的模型 class 是,
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,并使用代码[=14] 将结果设置为模型 class =]
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 的表视图委托之外,我将数组值一一加载到表视图中,例如,
let user = self.items[indexPath.row]
print(user.trainName)
print(user.delay)
现在在选择表视图时,我可以使用常规代码将适当的值传递给另一个名为 DetailsViewController 的 UIViewController。我的问题是,有没有办法直接从 DetailsViewController 访问模型 class(TrainObject),然后使用选定的 indexpath.row 值,获取适当的数组?或者我应该从 tableview 的 didselectrow 方法传递数组本身吗?我在这里感到困惑你能解释一下模型 class 的真正用途是什么吗?我应该如何以及在哪里实际使用它?
当用户 select tableview
上的特定项目时,您应该从数组中获取项目。并获取 DetailViewController
的实例并将 selected 项目传递给该实例。
例如:
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.
}
}