Hi I am new to swift and writing iOS application. I would like to know how can I better use generics to pass my result data.
I have one delegate which gives data of person from server
protocol PersonDataProvider {
func dataReceived(_ result: PersonResult)
}
Result can have success and fail status through enumeration.
enum PersonResult {
case success
case networkFailed
}
Below class calls server api and fetch data, passes back
class MyNetworkClass {
var personDataProvider: PersonDataProvider
func getDataFromServer() {
personDataProvider.dataReceived(.success)
}
}
Below is viewcontroller where i subscribe provider
class MyViewController: PersonDataProvider {
func dataReceived(_ result: PersonResult) {
switch result {
case .success:
print("success")
case .networkFailed:
print("no network")
}
}
}
Now, I would like send extra information with success block which can be anything like below data model. It may have any type.
class Employer:Person {
let id
let salary
}
class Student:Person {
let id
let rollNumber
}
How can I achieve that? Can i define associate type in protocol and achieve if yes how?
How can I subscriber "MyViewController" of "PersonDataProvider" can define type of result he expects from "success" block?