You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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需要传递指针而非直接传值,下面一步步给你讲清楚怎么修正:

问题根源

  1. notify_register_dispatch的第二个参数要求是UnsafeMutablePointer<Int32>!,但你定义的notify_token是Int类型,直接传值不符合API要求;
  2. notify_get_state的第二个参数需要UnsafeMutablePointer<UInt64>,你直接传入了state变量的值,而非它的指针。

修正后的完整代码

// 把token类型改为Int32,系统通知API原生用这个类型
var notify_token: Int32 = 0
notify_register_dispatch("com.apple.springboard.lockstate", &notify_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时用&notify_token、调用notify_get_state时用&state,通过&符号获取变量的可变指针,满足C风格API的要求;
  • 同步回调参数类型:把闭包里的token: Int改成token: Int32,保证参数类型全程一致。

这样修改后,代码就能正常编译,并且正确监听设备的锁屏/解锁状态了!

内容的提问来源于stack exchange,提问作者Abhishek Mitra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:37:01