Базовый interop
Flow → AsyncSequence в SKIE уже давно. Теперь поверх него добавили preview-слой под SwiftUI (в превью). Shared не трогаешь, тот же StateFlow.class RandomColorViewModel {
private val _color = MutableStateFlow(UIColor.gray)
val color: StateFlow<UIColor> = _color.asStateFlow()
fun randomize() {
_color.value = UIColor(
red = Random.nextDouble(),
green = Random.nextDouble(),
blue = Random.nextDouble(),
alpha = 1.0
)
}
}Без хелперов на iOS это всё ещё
.task + ручной @State. С preview-API экран выглядит так:struct ColorScreen: View {
let viewModel: RandomColorViewModel
@State private var color: Color = .gray
var body: some View {
ColorSample(color: color, onRandomize: viewModel.randomize)
.collect(flow: viewModel.color, into: $color) { Color($0) }
}
}Или без
@State — flow сразу кормит view:struct ColorScreen: View {
let viewModel: RandomColorViewModel
var body: some View {
Observing(viewModel.color, animation: .default) { color in
ColorSample(
color: Color(color),
onRandomize: viewModel.randomize
)
}
}
}Включается так:
//build.gradle.kts
skie {
features {
enableSwiftUIObservingPreview = true
}
}
В Kotlin to Swift Export interop корутин только догоняет. У SKIE базовый interop уже в бою, а
collect / Observing — свежий preview поверх него.🔗 Источник - блог Touchlab
#KMP #Kotlin #Touchlab #Swift #SwiftUI