在完成处理程序中调用第二个函数遇类型转换错误求助
解决CKApplicationPermissionStatus转TestLoginViewController的类型错误问题
嗨,这个错误本质是参数类型传错了——你肯定是在调用第二个函数的时候,把第一个函数返回的CKApplicationPermissionStatus类型值,当成TestLoginViewController类型的参数传进去了,或者第二个函数的参数定义本身就写错了。
我给你梳理下正确的实现方式:
首先,先还原你的第一个权限检查函数(补全常见逻辑):
func checkPermissions(returnHandler: @escaping (CKApplicationPermissionStatus) -> ()) { let container = CKContainer.default() // 以请求用户可发现性权限为例 container.requestApplicationPermission(.userDiscoverability) { status, error in if let error = error { print("权限检查失败:\(error.localizedDescription)") return } // 把权限状态通过回调返回 returnHandler(status) } }
然后,你的第二个函数必须定义成接收CKApplicationPermissionStatus类型参数,比如:
func processPermissionStatus(_ status: CKApplicationPermissionStatus) { // 根据权限状态做后续处理 switch status { case .granted: print("权限已通过,继续登录流程") // 这里写授权成功后的逻辑 case .denied: print("权限被拒绝,需要引导用户去设置开启") case .notDetermined: print("权限未确定,可以再次发起请求") @unknown default: print("遇到未知的权限状态") } }
最后,在第一个函数的完成回调里,正确传递参数:
// 调用权限检查函数 checkPermissions { [weak self] status in guard let self = self else { return } // 避免循环引用 // 把回调拿到的status传给第二个函数 self.processPermissionStatus(status) }
你可以按这几点排查错误:
- 检查第二个函数的参数类型:是不是写成了接收
TestLoginViewController而不是CKApplicationPermissionStatus? - 检查回调里的调用代码:是不是不小心把
self(当前ViewController实例)当成参数传给第二个函数了? - 如果第二个函数是实例方法,确认闭包里正确引用了
self,没有传混参数顺序。
内容的提问来源于stack exchange,提问作者user4174219
相关产品推荐
相关产品推荐

