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

Swift 4(Xcode 9.x)中@objc与dynamic关键字含义及用法解析

详解Swift 4(Xcode 9.x)中@objc和dynamic关键字的作用

我来给你拆解一下这两个“神奇”关键字在你的代码里的具体作用,毕竟咱们折腾出能跑的代码之后,搞懂背后的逻辑才是真的掌握了~

@objc 关键字:打通Swift与Objective-C的桥梁

  • 简单说,@objc的作用是把Swift的类、属性、方法暴露给Objective-C运行时环境。因为你用到的Cocoa绑定、KVO(键值观察)这些机制,都是Objective-C生态里的东西,Swift本身的静态类型系统默认不会把这些内容暴露给ObjC运行时。
  • 看你的代码:
    • @objc class Parameters : NSObject:虽然这个类继承了NSObject,但Swift 4之后自动@objc的范围缩小了,显式加上@objc能确保这个类的所有标注了@objc的属性、方法都能被ObjC侧识别。
    • @objc dynamic var value1、@objc dynamic var parameters、@objc dynamic var value3:这些@objc是让这些属性能通过ObjC的键值路径(比如你用到的"parameters.value1")被访问,这是Cocoa绑定能找到对应模型属性的前提。

dynamic 关键字:开启动态派发,支持KVO与绑定

  • dynamic的核心作用是让Swift的属性/方法绕过静态派发,改用Objective-C的动态消息转发机制。
  • 为什么必须用它?因为Cocoa绑定和KVO完全依赖ObjC的动态派发:只有动态派发的属性,系统才能在它变化时自动发出通知,让UI或者其他依赖的属性更新。
  • 对应你的代码场景:
    • @objc dynamic var value1: Double = 0:这里的dynamic是为了让NSTextField的绑定能监听到value1的变化——当用户在输入框里修改数值时,模型的value1会更新,同时绑定系统能收到通知;反过来如果代码里修改value1,输入框也会自动刷新。
    • @objc dynamic var parameters = Parameters():给这个属性加dynamic,是为了防止你替换整个Parameters实例时,绑定系统“失联”。比如如果你重新赋值parameters = Parameters(),dynamic能让系统感知到这个变化,重新把UI绑定到新实例的属性上。
    • @objc dynamic var value3: Double:这个计算属性依赖value1和value2,配合你没写完的keyPathsForValuesAffectingValue(forKey:)方法,dynamic能让系统在value1/value2变化时,自动触发value3的更新通知,让依赖value3的UI跟着刷新。

总结一下:你的代码里所有标注@objc dynamic的地方,都是为了适配Cocoa的绑定和KVO机制——@objc让Swift代码能被ObjC运行时看到,dynamic让它能支持ObjC的动态特性,两者搭配才能让你的数据绑定顺利工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:16:05