我正在一个项目中使用 Kotlin Multiplatform,仅共享业务逻辑数据。在我的
shared
库中,我实现了一个用例类,它提供了这样的流程存储库状态
class GetCatImagesForHomeScreenUseCase(private val repository: CatRepository) {
suspend operator fun invoke(limit: Int): Flow<RepositoryResult<List<CatImageDtoItem>>> =
repository.getCatImages(limit = limit, imageSize = CatImageSize.MEDIUM
)
在我的 swift 类中,我将使用流数据并使用 SKIE 插件将其显示到 UI。所以我已将插件添加到我的
build.gradle.kts
文件中并编写了这样的 swift 代码
import SwiftUI
import shared
struct ContentView: View {
@ObservedObject private(set) var viewModel: ViewModel
var body: some View {
CatImagesView(catImagesUrls: viewModel.cats)
.onAppear { self.viewModel.startObserving() }
}
}
extension ContentView {
@MainActor
class ViewModel: ObservableObject {
@Published var cats: [CatImageDtoItem] = []
func startObserving() {
Task {
let usecase = KotlinDependencies.shared.getCatImagesForHomeScreenUseCase()
for catItem in usecase.invoke(limit: 50) {
self.cats.append(catItem)
}
}
}
}
}
struct CatImagesView: View {
let catImagesUrls: [CatImageDtoItem]
var body: some View {
ScrollView {
LazyVGrid(columns: [GridItem(.flexible()), GridItem(.flexible())]) {
}
}
}
}
当我尝试编译代码时,我收到此错误消息:
For-in loop requires 'any Kotlinx_coroutines_coreFlow' to conform to 'Sequence'
在 for 循环中。`
有人可以解释一下我在这里缺少什么吗?我很想使用这个 SKIE 插件,但我不喜欢为每个流程编写一些样板包装器。
你找到解决办法了吗?
这是 SKIE 中的已知问题,应该在未来的版本中修复。
https://skie.touchlab.co/features/flows#unsupported-automatic-conversions
还有一个线程,其中 SKIE 的创建者之一回答了这个问题。