我在一个新的 Kotlin Multiplatform 移动项目中工作,我无法将 Kotlin 接口实现到 Swift 类中。
这是我的设置:
从 kotlin 通用(共享)模块:
interface LocalUserSource {
suspend fun saveUser(user: User): Boolean
suspend fun readUser(): User?
}
在 Swift 中实现协议(我相信协议是由 Kotlin/Native 生成的):
class DBUserSource : LocalUserSource {
func readUser(completionHandler: @escaping (common.User?, Error?) -> Void) {
// read user from core data
}
func saveUser(user: common.User, completionHandler: @escaping (KotlinBoolean?, Error?) -> Void) {
// save user with core data
}
}
Xcode项目可以看到生成的通用框架,我可以跳转到框架内的类/协议定义
但是构建 Xcode 项目不断导致这个错误:
类型“DBUserSource”不符合协议“LocalUserSource”
当我在 Xcode 中使用“修复”选项时,它会不断重复该方法并显示相同的错误。我已经尝试了所有方法来清理 android studio(我正在运行 gradle build)和 Xcode。
奇怪的是,我看过这个作品。我已经将用户保存并读取到核心数据,但今天我无法让 iOS 方面的工作正常工作。只是想知道是否有人经历过类似的事情,并有任何指示。
这里还有来自通用框架的objective-c定义:
__attribute__((swift_name("LocalUserSource")))
@protocol CommonLocalUserSource
@required
- (void)readUserWithCompletionHandler:(void (^)(CommonUser * _Nullable_result, NSError * _Nullable))completionHandler __attribute__((swift_name("readUser(completionHandler:)")));
- (void)saveUserUser:(CommonUser *)user completionHandler:(void (^)(CommonBoolean * _Nullable, NSError * _Nullable))completionHandler __attribute__((swift_name("saveUser(user:completionHandler:)")));
@end;