swift @objc dynamic

Posted feng9exe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift @objc dynamic相关的知识,希望对你有一定的参考价值。

@objc vs @objc dynamic

 

@objc:  Objective-C entry points

One can explicitly write @objc on any Swift declaration that can be expressed in Objective-C.

@objc dynamic:入口+动态派发机制。using the Objective-C message send mechanism。

 

dynamic no longer infers @objc

A declaration that is dynamic will no longer infer @objc. For example:

 

This change is intended to separate current implementation limitations from future language evolution: the current implementation supports dynamic by always using the Objective-C message send mechanism, allowing replacement of dynamic implementations via the Objective-C runtime (e.g., class_addMethod and class_replaceMethod). In the future, it is plausible that the Swift language and runtime will evolve to support dynamic without relying on the Objective-C runtime, and it‘s important that we leave the door open for that language evolution.

This change therefore does two things. First, it makes it clear that the dynamic behavior is tied to the Objective-C runtime. Second, it means that well-formed Swift 4 code will continue to work in the same way should Swift gain the ability to provide dynamic without relying on Objective-C: at that point, the method foo() above will become well-formed, and the method bar() will continue to work as it does today through the Objective-C runtime. Indeed, this change is the right way forward even if Swift never supports dynamic in its own runtime, following the precedent of SE-0070, which required the Objective-C-only protocol feature "optional requirements" to be explicitly marked with @objc.

 

https://github.com/apple/swift-evolution/blob/master/proposals/0160-objc-inference.md

 

 备注:

@objc exposes the variable to the ObjC runtime. dynamic tells the runtime to use dynamic dispatch instead of the default static dispatch. dynamic also implies @objc so @objc dynamic is redundant. You mostly utilize them in KVO and Cocoa Binding

https://stackoverflow.com/questions/48559768/what-does-objc-dynamic-var-mean-in-swift-4

以上是关于swift @objc dynamic的主要内容,如果未能解决你的问题,请参考以下文章

Swift与Objective-C的兼容“黑魔法”:@objc和Dynamic

@objc 动态变量在 Swift 4 中是啥意思

@objc vs @objc dynamic官方解释

为啥 Swift Int 零在 objc 代码中被读取为零?

Swift 函数中的动态修饰符

Objc 代码找不到 swift 中定义的 Bool 变量