ios - Swift:在视图控制器之间传递值
问题描述
这不是重复的问题! 我搜索了许多类似的问题,但找不到像我这样将数据模型声明/调用为类的人。
我想将我store
的信息从Table View Controller
to 传递给Detail View Controller
. 我无法声明正确类型的变量store
来接收我的Detail View Controller
.
我的店铺型号:
class StoreModel{
var name: String?
var desc: String?
var url: String?
var rate: Double
init(name: String?, desc: String?, url: String?, rate: Double){
self.name = name
self.desc = desc
self.url = url
self.rate = rate
}
}
在我的声明中,Table View Controller
我声明store
要从 Firebase 中保存数据:
class TableViewController: UITableViewController, UISearchResultsUpdating {
var storeList = [StoreModel]()
override func viewDidLoad() {
//Hide some codes that initialize Firebase connection ...
refStores.observe(DataEventType.value, with: {(snapshot) in
if snapshot.childrenCount > 0{
for stores in snapshot.children.allObjects as! [DataSnapshot]{
let storeObject = stores.value as? [String: AnyObject]
let storeName = storeObject?["storeName"]
let storeDesc = storeObject?["storeDesc"]
let storeUrl = storeObject?["storeUrl"]
let storeRate = storeObject?["storeRate"]
let store = StoreModel(name: storeName as! String?,
desc: storeDesc as! String?,url: storeUrl as! String?,
rate: storeRate as! Double)
self.storeList.append(store)
}
self.tblSearch.reloadData()
}})}
下面是我的尝试:
在我的详细视图控制器中,我声明storeList
接收传递的数据:
var storeList = [StoreModel]()
showDetailView
我在我的表视图控制器和详细视图控制器之间创建了一个 segue(带有标识符)。
override func tableView(_ tableView: UITableView,
didSelectRowAt indexPath: IndexPath) {
let selectedStore = storeList[indexPath.row]
let destinationVC = DetailViewController()
destinationVC.storeList = selectedStore
destinationVC.performSegue(withIdentifier: "showDetailView", sender: self)
} }
我Cannot assign value of type 'StoreModel' to type '[StoreModel]'
在该行收到错误消息,
destinationVC.storeList = selectedStore
所以我认为在我的Detail View Controller
.
感谢帮助!
解决方案
正如错误消息所述,无法将类型 'StoreModel' 的值分配给类型 '[StoreModel]'。您正在尝试将模型的单个实例分配给 DetailViewController 中的数组。要么声明
var storeList = StoreModel()
在 DetailViewController 中。或将值传递为
destinationVC.storeList = [selectedStore]
也用于创建一个实例
var storeList = StoreModel()
提供无参数初始化程序。
class StoreModel() {
var name: String?
var desc: String?
var url: String?
var rate: Double
init(name: String?, desc: String?, url: String?, rate: Double){
self.name = name
self.desc = desc
self.url = url
self.rate = rate
}
init() {
}
}
推荐阅读
- javascript - 在初始化 firebaseApp 时,将区域设置为 europe-west1,而不是 us-central1
- https - CRL 和 CRL 分发点有什么区别
- c# - 如何将对象列表添加到对象中并将其存储在数据库中?
- json - 对 JSON 数据进行分组并在 ruby 中过滤它们
- java - 调整 ImageIcon 的大小
- powerapps - Powerapps 下拉显示 Inputext aera
- function - 在 Emacs 中更改 savehist-minibuffer-history-variables 的值
- solidity - Chainlink 节点 - 作业失败 encode_tx 和 submit_tx 错误
- angular - 性能反应形式
- react-native - 氮氧化物;adb 服务器版本 (41) 与此客户端 (36) 不匹配;