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

macOS 10.12调用toggleAutomaticTextCompletion报错的兼容方案

macOS 10.12 兼容场景下无@available标注的版本报错解决

报错核心原因

toggleAutomaticTextCompletion(_:)是macOS 10.12.2才对外暴露的NSTextView方法,直接通过#selector(NSTextView.toggleAutomaticTextCompletion(_:))显式引用该方法时,编译器会强制触发API可用性校验,在部署目标设为macOS 10.12时就会抛出版本不兼容报错。

替代实现方案

不需要加任何@available版本标注,直接通过字符串构造Selector绕开编译期的API可用性检查即可,替换原有代码段为如下写法:

case .textCompletion:
    return (
        Selector("toggleAutomaticTextCompletion:"),
        .none
    )

实现说明

  • 该写法编译期不会校验对应API的存在性和版本要求,部署目标设置为macOS 10.12时可直接编译通过,完全符合不使用@available标注的要求。
  • Selector构造的方法签名和原#selector获取的方法完全一致,在macOS 10.12.2及以上系统中,调用效果和原写法无任何差异。
  • 低版本兼容处理:实际触发该方法调用前,增加responds(to:)判断即可避免低版本系统崩溃,示例判断逻辑:
if textView.responds(to: Selector("toggleAutomaticTextCompletion:")) {
    textView.perform(Selector("toggleAutomaticTextCompletion:"), with: nil)
}
  • 该方案依赖AppKit的Objective-C动态派发特性,方法命名是苹果系统公开稳定的API,不存在私有API调用风险。

内容的提问来源于stack exchange,提问作者Jeremy Seigle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 20:54:35