创建彼此相关的数组的过程通常是什么?
我要做的是创建一个简单的购物列表应用程序,我将有两个数组stores
和items
,它们将显示在UITableView中。 stores
数组将显示在主tableView中,当items
数组中的项目被点击时,stores
数组将显示在详细的tableView中,但我不知道如何这通常是完成的,我假设我需要某种二维数组(或一对多数组),但我有点困惑。
以下是我在主tableView中显示stores
数组的代码。
商店类:
import Foundation
class Store{
var storeName = ""
}
项目类别:
import Foundation
class Item : Object{
var itemName: String = ""
var price: Double = 0
}
主ViewController:
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var storesTable: UITableView!
@IBOutlet weak var inputStoreName: UITextField!
var itemList = [Item]() // I'm not sure how to use this array
var storeList = [Store]()
override func viewDidLoad() {
super.viewDidLoad()
storesTable.dataSource = self
storesTable.delegate = self
}
@IBAction func addNewStore() {
let store = Store()
store.storeName = inputStoreName.text!
storeList.append(store)
storesTable.reloadData()
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return storeList.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "myCustomCell")! as UITableViewCell
let data = storeList[indexPath.row]
cell.textLabel?.text = "\(data.storeName)"
return cell
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "detailTableView"{
if let destination = segue.destination as? DetailTableViewController{
let selectedStore = storeList[(storesTable.indexPathForSelectedRow?.row)!].storeName
destination.messageFromMainController = selectedStore
}
}
}
}
答案 0 :(得分:1)
实际上您需要在模型类中进行更改:
商店类:
class Store{
var storeName = ""
var itemList : Array<Item>? = []
}
现在,当您添加新商店时,您将使用名称添加此商店的商品。
@IBAction func addNewStore() {
let store = Store()
let item1 = Item()
item1.itemName = "FirstStoreFirstItem"
item1.price = "100"
let item2 = Item()
item2.itemName = "FirstStoreSecondtItem"
item2.price = "200"
store.storeName = inputStoreName.text!
store.itemList.append(item1)
store.itemList.append(item2)
storeList.append(store)
storesTable.reloadData()
}
现在,当您选择任何商店时,您将获得该商店中商品的详细信息,如下所示
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "detailTableView"{
if let destination = segue.destination as? DetailTableViewController{
let selectedStore = storeList[(storesTable.indexPathForSelectedRow?.row)!]
print(selectedStore.storeName)
print(selectedStore.itemList[0].itemName)
print(selectedStore.itemList[0].price)
destination.messageFromMainController = selectedStore
}
}
}
答案 1 :(得分:1)
在商店模型中添加商品
class Store{
var storeName = ""
var items:[Item]? = nil
}
启动商店对象以及商品。