Swift: как создать глобальный словарь и получить значения словаря в представлении Swiftui - PullRequest
1 голос
/ 06 августа 2020

Я пытаюсь быстро создать глобальный словарь, к которому я могу получить доступ в любом месте проекта.

Я пробовал это

struct Global {
    static var productList = [Product]() 
}

struct Product: Hashable {
    let name: String
    let aisleNo:Int
    let location_section: Int
    let location_zone: String
    let productPrice: Int
}

это каждое свойство продукта, которое я хотел бы добавить в словарь, причем каждый ключ продукта является свойством _id

         _id = 5f2158f71439a1549ab32cc9;
        _partitionKey = store=storename;
        productBrand = Ocean's Halo;
        productDept = Food;
        productDescription = Ocean's Halo Water Watermelon Lime;
        productImg = http://i5.walmartimages.com/asr/75a59918-8f1b-4b79-8b35-15a919981e5c_2.5efe5f0ccff7abaa7831c3795003fd93.png?odnHeight=180&odnWidth=180&odnBg=ffffff;
        productImg1 = /ip/Ocean-s-Halo-Deep-Sea-Water-Watermelon-Lime-16oz/866033215;
        productLocation_aisle = 14;
        productLocation_section = 1;
        productLocation_zone = A;
        productName = Ocean's Halo Deep Sea Water, Watermelon Lime, 16oz;
        productPrice = 2.97;
        productRating = 4.2;
        productUPC = List<string> <0x282252080> (
            [0] 00811670030224
        );
        product_stock_status = Limited Stock;
        storeProductId = 1TFNSLXLW0QP;
        store_available = store;
    }

Я пытаюсь добавить в Global productList с помощью этой функции

class SearchResult : ObservableObject {





func listItem() {

 for product in productArray {
            let productName = product.productName!
            let aisleNo = product.productLocation_aisle.value!
            let location_section = product.productLocation_section.value!
            let location_zone = product.productLocation_zone!
            let productPrice =  product.productPrice.value!
            let product_real_id = product._id!
            
            Global.productList.append(Product(name: productName, aisleNo: aisleNo, location_section: location_section, location_zone: location_zone, productPrice: Int(productPrice)))

}


}

проблема в том, что я хочу, чтобы ключ словаря был objectId чтобы продукты не дублировались и могли получить доступ к словарю в представлении swiftui

struct SearchResultView: View {
    
    var searchResults = [Global.productList]
    

    
        var body: some View {
               VStack {
                Text("Let's see where ")
//                for prodItem in searchResults {
//                    Text(prodItem).bold()
//                }

              
            }     
           }
    

}

Как мне добавить продукт в глобальный словарь с objectId в качестве ключа, а затем получить каждый продукт в представлении swiftUI?

1 Ответ

0 голосов
/ 06 августа 2020

Попробуйте использовать @ EnvironmentObject . Его можно использовать именно для того, что вы хотите.

Например, вы можете создать экземпляр вашего списка продуктов в своем основном ContentView. Затем вы можете передать выделенный список продуктов с помощью аннотации .environmentObject() при создании иерархии представлений.

Простой пример:

var productList = [Product]() 

var body: some View {
     ProductView {
    }.environmentObject(productList)
}

Поищите, как использовать EnvironmentObject. По мере того, как ваша модель данных становится более сложной, вы также можете изучить возможность использования Combine, чтобы способствовать распространению изменений ваших данных в иерархии представлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...