【发布时间】:2019-08-12 13:22:18
【问题描述】:
这不是重复的问题! 我搜索了许多类似的问题,但找不到像我这样将数据模型声明/调用为类的人。
我想将我的store 的信息从Table View Controller 传递给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]()
我在我的表视图控制器和详细视图控制器之间创建了一个 segue(标识符为 showDetailView)。
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 中声明正确类型的变量时遇到问题。
感谢您的帮助!
【问题讨论】:
-
在
Detail View Controller设置var storeList = StoreModel()不是Array -
@biloshkurskyi.ss 你好!这种方式显示错误:
Missing argument for parameter 'name' in call. -
最重要的问题是
let destinationVC = DetailViewController()。这不是预期的控制器实例。错误很明显:selectedStore是 单个 对象,storeList需要 多个 对象。 -
肯定是重复的。通过远端属性的期望是微不足道的,取决于你。现在在 cmets 中,您的问题已经转移到有关 Swift 语言基础的其他内容中,这些内容也很琐碎,并且已经在这里进行了很好的介绍。
-
@ayaio 你好,我在这里找不到“回答你的问题”按钮,我猜是因为我的问题被标记为重复。
标签: ios swift uitableview detailview