2

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

这是我尝试过的:

let method = class_getClassMethod(self, original1)

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

但是,这不起作用,如果我将 str 的类型更改为 String,我们可以正常 swizzle,任何人都有机会 swizzle 带有 StaticString 类型参数的函数可以帮忙吗?

谢谢

4

1 回答 1

1

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

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

于 2015-11-17T03:09:52.833 回答