Swift中使用 +load 和 +initialize
Posted 想名真难
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift中使用 +load 和 +initialize相关的知识,希望对你有一定的参考价值。
+load
和 +initialize
方法是我们写 Objective-C 代码时常用的两个方法,不过貌似在 Swift 4.x
后,这两个方法在 Swift 类中不那么好使,会报如下编译错误:
Method 'load()' defines Objective-C class method 'load', which is not permitted by Swift Method 'initialize()' defines Objective-C class method 'initialize', which is not permitted by Swift
所以,如果想在 Swift 类中使用这两个方法,则需要求助于 Objective-C,使用变通的方法,如下代码所示:
// swift
class Monitor: NSObject
@objc class func swiftLoad()
// do something
print("swift load")
@objc class func swiftInitialize()
// do something
print("swift initialize")
// Objective-C
@implementation Monitor (Private)
+ (void)load
[self swiftLoad];
+ (void)initialize
[self swiftInitialize];
@end
当然,由于这两个方法是 NSObject 类中声明的,所以我们的 Swift 类必须继承自 NSObject 或其子类。另外,我们也可以不用上面这么麻烦地去定义 swiftLoad/swiftInitialize
方法,而是所有操作直接在 Objective-C 代码中完成。
以上是关于Swift中使用 +load 和 +initialize的主要内容,如果未能解决你的问题,请参考以下文章
用dlopen和dlsym得到的符号 在dlclose后还能继续使用么
R Shiny - 我无法从selectInput操作中检索选定的输出值