KMM应用中Realm仓库dologin方法调用报未识别选择器异常
问题原因与解决方案
异常原因
- KMM绑定的命名转换问题
Kotlin的suspend函数暴露给Swift时,会自动转为带completionHandler的Objective-C风格方法,命名严格遵循Kotlin到Obj-C的转换规则:Kotlin方法名需为标准小驼峰(首字母小写,后续单词首字母大写),生成的Obj-C选择器会基于此规则拼接参数名。
你的login方法符合小驼峰规范,生成的选择器loginEmail:password:completionHandler:能被Swift正确识别;但dologin是全小写连写(不符合Kotlin命名规范),导致KMM生成绑定文件时出现命名转换异常,Swift端调用时找不到对应的方法实现,抛出unrecognized selector错误。
- 未更新共享模块绑定
如果新增dologin方法后没有重新编译KMM共享模块,Swift端的自动生成桥接文件不会同步更新,自然找不到新方法的绑定信息,也会触发该异常。
解决步骤
- 修正Kotlin方法命名
遵循Kotlin编码规范,将dologin改为标准小驼峰写法doLogin:
suspend fun doLogin(email: String, password: String): User { return appService.login(Credentials.emailPassword(email, password)) }
- 重新编译共享模块
修改Kotlin代码后,重新编译KMM共享模块(比如执行./gradlew shared:compileKotlinIos,或在Android Studio中点击编译按钮),确保Swift端获取到最新的绑定文件。 - 更新Swift调用代码
将Swift中的调用改为匹配新方法名:
repo.doLogin(email: $userId.wrappedValue, password: $password.wrappedValue) { user, error in // 处理回调逻辑 }
额外提示
KMM对Kotlin代码的命名规范敏感度较高,非标准命名容易引发跨平台绑定异常,建议始终遵循Kotlin官方命名约定编写共享模块代码。
内容的提问来源于stack exchange,提问作者dhaval123
相关产品推荐
相关产品推荐

