在SWIFT中进入客观C级决赛

xoefb8l8  于 2022-09-19  发布在  Swift
关注(0)|答案(1)|浏览(107)

将Swift类设为Final是一种常见的做法,除非继承是绝对必要的,否则会鼓励使用组合。SWIFT通过设置Objective-C属性objc_subclassing_restricted来强制执行此操作,而不考虑导入到Objective-C时的final关键字。然而,具有这些属性的接口并没有像我预期的那样作为final类导入到SWIFT中。

如何创建从Objective-C final导入的SWIFT类?

w6lpcovy

w6lpcovy1#

而是鼓励使用构图。

这不是final的主要目标。最终类受益于编译时优化--由于编译器知道类是最终类,因此不会覆盖任何方法,因此它可以跳过vtable查找,直接转到这些方法的二进制位置。

作为一种语言,Objective-C不支持最终类,所以除非该语言发展到包含这样的类,否则在SWIFT端支持它是没有意义的。

对于您看到的objc_subclassing_restricted,该属性的目标不是使Swift类成为最终类,而是防止它被Objective-C代码子类化。关于属性here有一个很好的讨论,引用了一句相关的话:
您不能将SWIFT类划分为子类(即使它是NSObject的子类并且可用于Objective-C运行时),因为OBJ-C中故意设置了限制,以阻止在OBJ-C代码中划分SWIFT类的子类。

相关问题