Swift:在View Controller之间传递值[重复]

问题描述 投票:-1回答:2

这个问题在这里已有答案:

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

我想将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()
    }})}

以下是我的尝试:

在我的Detail View Controller中,我声明storeList接收传递的数据:

var storeList = [StoreModel]()

我在Table View Controller和Detail View Controller之间创建了一个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中声明了正确的变量类型有问题。

感谢帮助!

ios swift uitableview detailview
2个回答
0
投票

您只传递一个商店数据。因此,您需要在此处更改Detail View Controller

var storeList = [StoreModel]()

var storeList:StoreModel!

这是因为在这里let selectedStore = storeList[indexPath.row]你只选择一个selectedStore。


0
投票

由于错误消息描述无法分配类型'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() {
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.