Как реализовать протоколы и делегатов в SwiftUI - PullRequest
0 голосов
/ 05 августа 2020

Я конвертировал один из моих быстрых проектов в SwiftUI. Мне нужно преобразовать делегаты и протоколы в SwiftUI, разрешено ли это в SwiftUI? или есть какие альтернативные методы? Пожалуйста, помогите мне, я так запутался в SwiftUI.

Я вызываю метод делегата из одного своего класса, тогда метод делегата будет присутствовать в другом ViewController.

//PresenterClass

protocol SplashPresenterDelegate {
    func didFetchedSystemInfo(info: String)
}
class SplashPresenter: NSObject {
    var delegate: SplashPresenterDelegate?

    func getSystemInfo(){
         self.delegate?.didFetchedSystemInfo(info: "ResponseString") 
    }
}


// Viewcontroller class

class myViewController: UIViewController {
   .
   .
   .
}

extension  myViewController: SplashPresenterDelegate{
   func didFetchedSystemInfo(info: String){
      print("delegate called")
   } 
}

Пожалуйста помогите мне преобразовать этот код в SwiftUI

1 Ответ

0 голосов
/ 05 августа 2020

Обычно SwiftUI предпочитает схему приема обратных вызовов, а не протокол / делегатов. Например, каждая кнопка в ActionSheet имеет закрытие, которое выполняется при нажатии кнопки.

Однако вы не должны просто преобразовывать свой код напрямую. SwiftUI, будучи декларативным, использует разные парадигмы для многих вещей. Например, у вас не было бы метода didFetchInfo, вы бы просто назначили его переменной @Published.

Подумайте о наличии « единых источников истины », где один переменная всегда верна. Например, List просто принимает массив и обновляется при изменении массива, в отличие от UITableView, где вы предоставляете данные через numberOfRows и cellForRowAt. Я не знаю достаточно о вашем конкретном c проекте, чтобы дать более подробную информацию, но это то, о чем стоит подумать.

...