使用 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
标记函数也会导致编译器发出错误,这可以帮助您诊断问题。
我正在尝试调配一个包含 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
标记函数也会导致编译器发出错误,这可以帮助您诊断问题。