使用 StaticString 在 Swift 中调配

Swizzling in Swift with StaticString

我正在尝试调配一个包含 StaticString 参数的 Swift 函数。

这是我尝试过的:

let method = class_getClassMethod(self, original1)

class ABC {
  public static func updateABC(context: Int, str: StaticString) {
  }
}

但是,这不起作用,如果我将 str 的类型更改为 String,我们就可以正确地调配,任何人有机会调配具有 StaticString 类型参数的函数可以帮忙吗?

谢谢

StaticString 是值类型,因此它没有 Objective-C 表示。因此,它——以及您在其中使用它的声明——不会暴露给 Objective-C 代码,也不会在 Objective-C 运行时注册。另一方面,String 是 Objective-C 兼容的(它连接到 NSString),因此声明是 Objective-C 兼容的。

如果你要调配一个方法,你需要用 dynamic 标记它,让编译器知道它应该始终通过 Objective-C 运行时路由调用,即使在优化代码中也是如此.如果您的函数不 Objective-C 兼容,用 dynamic 标记函数也会导致编译器发出错误,这可以帮助您诊断问题。