首页 > 解决方案 > Swift:在视图控制器之间传递值

问题描述

这不是重复的问题! 我搜索了许多类似的问题,但找不到像我这样将数据模型声明/调用为类的人。

我想将我store的信息从Table View Controllerto 传递给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.

感谢帮助!

标签: iosswiftuitableviewdetailview

解决方案


正如错误消息所述,无法将类型 '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() {
    }
}

推荐阅读