закрытие через typealias swift не работает - PullRequest
0 голосов
/ 12 апреля 2020

почему закрытие typealias не передает данные и ничего не выводит на консоль? Как это исправить?

class viewModel: NSObject {
    var abc = ["123", "456", "789"]
    typealias type = ([String]) -> Void
    var send: type?

    func createCharts(_ dataPoints: [String]) {
        var dataEntry: [String] = []
        for item in dataPoints {
            dataEntry.append(item)
        }
        send?(dataEntry)
    }

    override init() {
        super.init()
        self.createCharts(abc)
    }
}

class ViewController: UIViewController {
    var viewModel: viewModel = viewModel()

    func type() {
        viewModel.send = { item in
            print(item)
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        print("hello")
        type()
    }
}

У меня есть проект, в котором работает похожий дизайн, но я не могу его повторить

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

Шаблон в порядке, но время выключено.

Вы звоните createCharts во время init модели представления. Но контроллер представления устанавливает закрытие send после завершения init модели представления.

В итоге, вы, вероятно, не хотите звонить createCharts во время init модели представления.

0 голосов
/ 12 апреля 2020

Возможное решение - создать собственный инициализатор:

class viewModel: NSObject {
    ...
    init(send: type?) {
        self.send = send
        self.createCharts(abc)
    }
}

class ViewController: UIViewController {
    var viewModel: viewModel = viewModel(send: { print($0) })
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...