Swift 面试题
目录

Swift 中 @objc 和 dynamic 关键字的作用是什么?

· 约 3 分钟读完 · 第 171 / 196 章

推荐答案

在 Swift 中,@objc 和 dynamic 关键字用于与 Objective-C 运行时进行交互。

  • @objc:用于将 Swift 类、方法、属性等暴露给 Objective-C 运行时。它允许 Swift 代码与 Objective-C 代码进行互操作。
  • dynamic:用于指示某个成员(如属性或方法)的动态调度行为。它告诉编译器不要对成员进行静态优化,而是通过 Objective-C 运行时进行动态调度。

本题详细解读

@objc 关键字

@objc 关键字的主要作用是将 Swift 代码暴露给 Objective-C 运行时。具体来说:

  1. 类与协议:当你需要在 Objective-C 中使用 Swift 类或协议时,可以使用 @objc 标记它们。例如:

    这样,MyClass 和 myMethod 就可以在 Objective-C 中被调用。

  2. 选择器:@objc 还用于指定方法的选择器名称。例如:

    在 Objective-C 中,这个方法可以通过 myMethodWithName: 来调用。

  3. 属性:@objc 也可以用于属性,使其在 Objective-C 中可见:

dynamic 关键字

dynamic 关键字用于指示某个成员(如属性或方法)的动态调度行为。具体来说:

  1. 动态调度:dynamic 告诉编译器不要对成员进行静态优化,而是通过 Objective-C 运行时进行动态调度。这意味着你可以在运行时替换或修改这些成员的行为。例如:

  2. KVO 和 KVC:dynamic 关键字通常与 Key-Value Observing (KVO) 和 Key-Value Coding (KVC) 一起使用。例如:

    这样,myProperty 就可以被 KVO 观察。

  3. 与 @objc 结合使用:dynamic 通常与 @objc 结合使用,以确保成员可以通过 Objective-C 运行时进行动态调度:

总结

  • @objc 用于将 Swift 代码暴露给 Objective-C 运行时。
  • dynamic 用于指示成员的动态调度行为,通常与 @objc 结合使用以实现 KVO 和 KVC 等功能。