Swift 4.1中Int无法转为UnsafeMutablePointer<Int32>!错误的解决咨询
解决Swift 4.1中
Cannot convert value of type 'Int' to expected argument type 'UnsafeMutablePointer<Int32>!'错误 嗨,我来帮你搞定这个问题!你遇到的错误是因为对notify系列C风格API的参数类型理解有偏差——这些API需要传递指针而非直接传值,下面一步步给你讲清楚怎么修正:
问题根源
notify_register_dispatch的第二个参数要求是UnsafeMutablePointer<Int32>!,但你定义的notify_token是Int类型,直接传值不符合API要求;notify_get_state的第二个参数需要UnsafeMutablePointer<UInt64>,你直接传入了state变量的值,而非它的指针。
修正后的完整代码
// 把token类型改为Int32,系统通知API原生用这个类型 var notify_token: Int32 = 0 notify_register_dispatch("com.apple.springboard.lockstate", ¬ify_token, DispatchQueue.main) { (token: Int32) in var state: UInt64 = UINT64_MAX // 传递state的指针&state给API notify_get_state(token, &state) if state == 0 { print("unlock device") } else { print("lock device") } }
关键修改点
- 调整token类型:将
notify_token从Int改为Int32,完全匹配系统API的参数类型; - 传递可变指针:调用
notify_register_dispatch时用¬ify_token、调用notify_get_state时用&state,通过&符号获取变量的可变指针,满足C风格API的要求; - 同步回调参数类型:把闭包里的
token: Int改成token: Int32,保证参数类型全程一致。
这样修改后,代码就能正常编译,并且正确监听设备的锁屏/解锁状态了!
内容的提问来源于stack exchange,提问作者Abhishek Mitra
相关产品推荐
相关产品推荐

