UIAlertAction вызывает метод в классе ViewController - PullRequest
0 голосов
/ 30 мая 2020

Я пытаюсь привести в порядок свой рабочий код, переместив общие функции в отдельный быстрый файл. У меня проблема с перемещением некоторого кода UIAlert, потому что он вызывает метод в ViewController. Этот метод выполняет ключевой код ViewController, и компилятор не позволяет мне определить его как метод class.

func showFavouritesAlert() -> Void {
    //either shows a list of favourites or message stating no favourites
    if defaults.noFavourites {
        showNoFavouritesAlert(sender: self)
    } else { //favourites are present so show them
        let alertController = UIAlertController(title: "UK Tides", message: Const.selectStoredFavouritesMessage, preferredStyle: .alert)
        for station in defaults.getFavourites() {//note use of capture list in [] to hold value not reference to index
            let action = UIAlertAction(title: station.name, style: .default) { [station] _ in
                self.useFavourite(station)
            }
            alertController.addAction(action)
        }
        alertController.addAction(UIAlertAction(title: "Cancel", style: .default))

        self.present(alertController, animated: true, completion: nil)
        print(showSelectFavouritesAlert(sender: self))
    }
    return
}

func useFavourite(_ tideStation: TideStations.TideStation) -> Void {
    //if tide station favourite selected, update all screen elements
    defaults.saveStation(tideStation)
    tideStationLabel.text = tideStation.name
    addDeleteFavouriteButton.setBackgroundImage(UIImage(systemName: "star.slash.fill"), for: .normal)
    drawChart()
    getAstronomicalTimes(date: selectedDate.noon, forStation:  tideStation)
    getTidalEvents(date: selectedDate, forStation: tideStation)
}

Проблема заключается в том, что закрытие UIAlertAction вызывает вызов метода useFavourite, когда параметр в оповещение коснется. Когда я помещаю код обработки предупреждений в отдельный файл Swift, я получаю ошибку компилятора. Как я могу выполнить код useFavourite из функции showFavouritesAlert (), если я помещу этот код в отдельный файл?

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