[英]How to relate two arrays in Swift
創建相互關聯的數組的典型過程是什么?
我想做的是創建一個簡單的購物清單應用程序,其中將有兩個數組, stores
和items
,這些items
將顯示在UITableView中。 該stores
陣列將顯示在主的tableView和items
陣列將顯示在當從一個項目一個細節的tableView stores
陣列被竊聽,但我不知道這是如何完成通常,我假設我需要一些二維數組(或一對多數組),但我有點困惑。
這是我在主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
}
}
}
}
實際上,您需要在模型類中進行更改:
商店類別:
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
}
}
}
在商店模型中添加項目
class Store{
var storeName = ""
var items:[Item]? = nil
}
與項目一起啟動存儲對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.