【问题标题】:Swift equivalent to ObjC Module Initializers [duplicate]Swift 等效于 ObjC 模块初始化器 [重复]
【发布时间】:2018-08-30 19:31:24
【问题描述】:

首先,当我的应用程序加载到内存中时,我会尝试在我的应用程序中执行代码(仅来自我的 Swift 框架!)。

通常我会在我的框架加载到内存时使用这个 ObjC 方法来执行代码。

在 Swift 中有与此等价的东西吗?

static void __attribute__((constructor)) initialize(void){
    NSLog(@"==== Code Injection in Action====");
    /*
    My Code
    */
}

我发现了什么:

Apple Developer Page regarding this(但也只在 ObjC 中解释过)

Other Page about Code Injection in general

有什么想法吗?

【问题讨论】:

  • __attribute__((constructor))s 甚至在 +[NSObject initialize] 之前运行,不过,@CharlesSrstka, IIRC。
  • @JoshCaswell 是的,这就是我最初回答这个问题的原因;一直在这方面来回走动。不过,从概念上讲,这是一回事。如何使用 Swift 不可用的 Objective-C 初始化钩子。
  • @JoshCaswell 啊,再想一想,你可能是对的,这在技术上不是同一个问题。我想知道我是否可以收回重复投票。
  • @CharlesSrstka,不用担心。我可以自己重新打开它,但让我先 ping Martin。
  • @MartinR:你对以上有什么想法吗?

标签: objective-c swift code-injection dylib


【解决方案1】:

目前,Swift 没有这个功能。您可以为您的框架定义一个初始化函数并要求您的客户在使用任何其他 API 之前调用它,或者您可以将一个 Objective-C 文件混合到项目中。

【讨论】:

  • 我知道,但是在将两者与桥接头混合时遇到了很多并发症
  • @JohnSmith 您可以使用 Objective-C 运行时在没有桥接头的情况下做到这一点。请参阅我对this question的回答
  • @JohnSmith 你看到的具体行为是什么?
  • ObjC 代码被执行,但没有调用 Swift 代码
  • 没关系。问题是我的项目被称为 C-Injection,它只有在我编写 C_Injection 时才有效,但无论如何谢谢
猜你喜欢
  • 2011-02-15
  • 1970-01-01
  • 2012-11-28
  • 2017-07-23
  • 1970-01-01
  • 2020-08-07
  • 2020-08-18
  • 2010-12-27
  • 1970-01-01
相关资源
最近更新 更多