Привет, я новичок в разработке и написании приложений для iOS.Я хотел бы знать, как я могу лучше использовать обобщенные элементы для передачи моих результатов.
У меня есть один делегат, который дает данные о человеке с сервера
protocol PersonDataProvider {
func dataReceived(_ result: PersonResult)
}
Результат может иметь успех и статус ошибкичерез перечисление.
enum PersonResult {
case success
case networkFailed
}
Ниже класс вызывает сервер api и извлекает данные, передает обратно
class MyNetworkClass {
var personDataProvider: PersonDataProvider
func getDataFromServer() {
personDataProvider.dataReceived(.success)
}
}
Ниже находится viewcontroller, где я подписываюсь на провайдера
class MyViewController: PersonDataProvider {
func dataReceived(_ result: PersonResult) {
switch result {
case .success:
print("success")
case .networkFailed:
print("no network")
}
}
}
Сейчас,Я хотел бы отправить дополнительную информацию с успешным блоком, который может быть чем-то вроде ниже модели данных.Это может иметь любой тип.
class Employer:Person {
let id
let salary
}
class Student:Person {
let id
let rollNumber
}
Как мне этого добиться?Могу ли я определить ассоциированный тип в протоколе и добиться, если да, то как?
Как подписчик "MyViewController" из "PersonDataProvider" может определить тип результата, который он ожидает от блока "success"?