这个问题在这里已有答案:
这不是一个重复的问题!!我搜索了许多类似的问题,但我找不到有人声称/将数据模型称为像我这样的类。
我想将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
中声明了正确的变量类型有问题。
感谢帮助!
您只传递一个商店数据。因此,您需要在此处更改Detail View Controller
var storeList = [StoreModel]()
至
var storeList:StoreModel!
这是因为在这里let selectedStore = storeList[indexPath.row]
你只选择一个selectedStore。
由于错误消息描述无法分配类型'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() {
}
}