I’ve working on a simple Kotlin Multiplatform project that target iOS and Android. I have a Repository class for combining the data from the network and local database. and I would like to expose this data through my shared module as a suspending functions with the Result type like so:
commonMain/ override suspend fun getPokemonSpecies(id: Int): Result<PokemonSpecies> { return local.getPokemonSpecies(id).recoverCatching { val species = remote.getPokemonSpecies(id).getOrThrow() local.savePokemonSpecies(species).getOrThrow() } }
However, in my Swift ViewModel the suspending function’s callback resolves with an Any?
type. I can print this data and it looks correct in the console, but can’t use the value as anything other than an Any?
. I’ve tried casting to Result
but [Pokemon]
but to no avail. Is this use case supported or should I just fallback to throwing exceptions/writing a custom ResultType?
iosApp/ func loadPokemon() { pokemonRepo.getPokemonPage(page: 0) { pokemon, error in if (pokemon != nil) { print(pokemon!) // prints Success([Pokemon(...), ...]) self.pokemonResult = .success(pokemon!) // fails because this is type Any } else { self.pokemonResult = .failure(error ?? ...) } } }
submitted by /u/fegan104
[link] [comments]