簡體   English   中英

如何在Swift中關聯兩個數組

[英]How to relate two arrays in Swift

創建相互關聯的數組的典型過程是什么?

我想做的是創建一個簡單的購物清單應用程序,其中將有兩個數組, storesitems ,這些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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM