I can't understand the problem with Swift Generic
Here is my snippet of code
protocol StateClient: class {
func update<NewState: State, PrevState: State>(state: NewState, prevState: PrevState)
}
protocol State {
init(client: StateClient)
}
protocol ProfileState: State {
var isActiveState: Bool { get }
var isInactiveState: Bool { get }
func setActiveState()
func setInactiveState()
}
extension State {
func setState<T: State, C: StateClient>(class: T.Type, client: C?) {
guard let client = client else {
return
}
let newState = T(client: client)
client.update(state: newState, prevState: self)
}
}
// - Implementation
struct InactiveState: ProfileState {
private weak var client: StateClient?
var isActiveState: Bool = false
var isInactiveState: Bool = true
init(client: StateClient) {
self.client = client
}
func setActiveState() {
setState(class: ActiveState.self, client: client)
}
func setInactiveState() {
}
}
struct ActiveState: ProfileState {
private weak var client: StateClient?
var isActiveState: Bool = true
var isInactiveState: Bool = false
init(client: StateClient) {
self.client = client
}
func setActiveState() {
}
func setInactiveState() {
}
}
I can't compile the code above. The error :
error: MyPlayground22.playground:38:51: error: in argument type 'StateClient?', 'StateClient' does not conform to expected type 'StateClient' setState(class: ActiveState.self, client: client)"
What's wrong ? Any advice would be appreciated)