Как назначить результат мойки переменной - PullRequest
0 голосов
/ 18 октября 2019

Я бы хотел присвоить результат из издателя центра уведомлений переменной alert. Ошибка, которую я получаю:

Cannot use instance member 'alerts' within property initializer; property initializers run before 'self' is available

Может ли кто-нибудь помочь мне здесь?

import Foundation
import SwiftUI
import Combine

final class PublicAlerts: ObservableObject{

    init () {
        fetchAlerts()
    }

    var alerts = [String](){
        didSet {
            didChange.send(self)
        }
    }

    private func fetchPublicAssets(){
        backEndService().fetchAlerts()
    }

    let publicAssetsPublisher = NotificationCenter.default.publisher(for: .kPublicAlertsNotification)
        .map { notification in
            return notification.userInfo?["alerts"] as! Array<String>
        }.sink {result in
            alerts = result
        }

    let didChange = PassthroughSubject<PublicAlerts, Never>()
}

Позже я буду использовать alerts это в SwiftUI как список

1 Ответ

1 голос
/ 18 октября 2019

Переместить подписку в init

final class PublicAlerts: ObservableObject{

    var anyCancelable: AnyCancellable? = nil

    init () {
        anyCancelable = NotificationCenter.default.publisher(for: .kPublicAlertsNotification)
            .map { notification in
                return notification.userInfo?["alerts"] as! Array<String>
        }.sink {result in
            alerts = result
        }
        fetchAlerts()
    }

    var alerts = [String](){
        didSet {
            didChange.send(self)
        }
    }

    private func fetchPublicAssets(){
        backEndService().fetchAlerts()
    }

    let didChange = PassthroughSubject<PublicAlerts, Never>()
}
...