Переменная в инициализаторе SwiftUI

У меня есть такой код:

import SwiftUI
import QGrid

struct VerCanales: View {
    
    var categoria:String
    @ObservedObject var canales = CargarCanales(categoriaID: categoria)
    
    var body: some View {
        NavigationView{
            QGrid(self.canales.listaCanales, columns: 3){item in
                NavigationLink(destination:VlcPlayerDemo()){
                    Text(item.name).frame(width:400, height:50)
                }
            }
            
        }.navigationBarTitle(Text("CHANNELS AVAILABLE"))
    }
}

Категория varibale взята из предыдущего представления в качестве параметра, и мне нужно передать его в качестве параметра в @ObservedObject, но у меня возникает следующая ошибка: невозможно использовать член экземпляра «categoryoria» в инициализаторе свойства; инициализаторы свойств запускаются до того, как станет доступным 'self'

Я новичок в языке Swift, и я искал, но не могу найти хорошее решение


person Fabian Reyes    schedule 30.11.2020    source источник


Ответы (1)


Вам необходимо инициализировать переменную canales внутри инициализации представления VerCanales.

struct VerCanales: View {
    
    private var categoria: String
    @ObservedObject var canales: CargarCanales
    
    init(categoria: String, canales: CargarCanales) {
        self.categoria = categoria
        self.canales = canales
    }
    
    var body: some View {
        NavigationView{
            QGrid(self.canales.listaCanales, columns: 3){item in
                NavigationLink(destination:VlcPlayerDemo()){
                    Text(item.name).frame(width:400, height:50)
                }
            }
            
        }.navigationBarTitle(Text("CHANNELS AVAILABLE"))
    }
}
person Raja Kishan    schedule 30.11.2020
comment
Спасибо за вашу помощь, но теперь, в предыдущем представлении, какую переменную мне отправить? NavigationLink(destination:VerCanales(categoria: item.categoryID, canales: HERE )){ Text(item.categoryName).frame(width:400, height:50) - person Fabian Reyes; 30.11.2020
comment
Для этого сделайте var canales приватным и удалите canales из параметра инициализации. `` @ObservedObject private var canales: CargarCanales init (category: String) {self.categoria = category self.canales = CargarCanales (categoryID: category)} `` - person Raja Kishan; 30.11.2020