Swift 4 Передача данных на другой контроллер, оставаясь в том же контроллере без представления - PullRequest
0 голосов
/ 16 сентября 2018

У меня продукт viewcontroller содержит следующее:

class arProduct: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {

// cart ready array
var cartArray = [String]()
var cartIcon: UIImage?
}

, в котором пользователь, использующий интерфейс, завершает детали продукта и нажимает кнопку «Добавить в корзину»

У меня есть еще одинКонтроллер view, называемый cart, содержит следующее:

class arCart: UIViewController {

//var
var cartMasterArray = [[String]]()
var cartImageArray = [UIImage]() 
}

Обычно я бы делал подготовку в продукте, устанавливая arCart в качестве места назначения и назначая переменные.Как только спектакль называется, все работает нормально.Однако здесь мне нужно что-то вроде этого:

prepare (...) {
let destination = segue.destination as arCart!
destination.cartMasterArray.append(self.cartArray)
}

, который работает нормально, но это означает, что я должен искать, чтобы это работало.НО, пользователь может не захотеть переходить после нажатия кнопки «Добавить в корзину», он может перейти к другому продукту и добавить другой продукт в корзину, только когда он закончит, он может перейти в корзину, и он может не перейти в корзину.из вида продукта.

Итак, мой вопрос, есть ли способ передать данные в корзину vc без необходимости переходить к ней?то есть подготовка, которая установит глобальное значение, которое можно использовать без перехода?как хранить переменную в памяти, в основном независимую от цикла контроллера.

Спасибо,

Отредактировано в соответствии с запросом с фрагментами кода.

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Создайте модель для хранения ваших продуктов, а затем (одноэлементный) контроллер данных для обработки корзины.

class Product {

   var name: String = ""
   var image: UIImage?
   // Any other attributes of the product

   // Add init(s) and method as appropriate to set-up products
}

struct Products {

    var products: [Product] = []

    func loadProducts() {
        // Load your list of products from somewhere
    }
}

struct Cart {

   private var itemsInCart: [Product] = []

   func addProductToCart(_ product: Product) {
       itemsInCart.append(product)
   }

   func productsInCart() -> [Product] {
       return itemsInCart
   }

   // Other methods to handle the cart
}

// Better for the cart view controller to access the data controller,  
// but you can set the cart data in the segue...

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let vc = segue.destination as? MyViewControllerClass {
        vc.cart = Cart.productsInCart()
    }
}

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

Вы также можете использовать делегатов для связи между контроллерами представления.

0 голосов
/ 16 сентября 2018

Там может быть лучший способ сделать это.Сохранение данных вашей корзины в UserDefaults будет более стабильным, чем передача их между контроллерами представления.Затем просто прочитайте из UserDefaults, когда загружен контроллер представления корзины.

Вот пример:

let cartArray =["item1", "item2"]

let defaults = UserDefaults.standard
defaults.set(cartArray, forKey: "cartArray")

Затем, когда вам нужно загрузить данные корзины:

let savedCart = defaults.object(forKey: "cartArray") as? [String] ?? [String]()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...