Tony Lin
02/16/2023, 7:37 PMclass SwiftFlow<out T: Any>(private val flow: StateFlow<T>) {
fun onChange(
stateProvider: (T) -> Unit
) {
flow.onEach {
stateProvider.invoke(it)
}.launchIn(CoroutineScope(Dispatchers.Main))
}
}
However, in swift code, I cannot use generics <String> and it shows requirement specified as 'T' : 'AnyObject' [with T = String]
error
class AppViewModel: ObservableObject {
let greetFlow = SwiftFlow<String>(flow: Greeting().greetAsFlow())
@Published var greet: String = "Initializing"
init() {
greetFlow.onChange { newState in
self.greet = newState
}
}
}
I need to use AnyObject
and force-cast to String
instead
class AppViewModel: ObservableObject {
let greetFlow = SwiftFlow<AnyObject>(flow: Greeting().greetAsFlow())
@Published var greet: String = "Initializing"
init() {
greetFlow.onChange { newState in
self.greet = newState as! String
}
}
}