【发布时间】:2018-09-17 11:04:28
【问题描述】:
这是用 Objective-C 编写的方法调配代码。我很难在 Swift 中转换它。
void MPApplicationDidRegisterForRemoteNotificationsWithDeviceToken(id self, SEL _cmd, UIApplication *application, NSData *deviceToken) {
[[MPPush shared] appRegisteredForRemoteNotificationsWithDeviceToken:deviceToken];
IMP original = [MPAppDelegateProxy originalImplementation:_cmd class:[self class]];
if (original)
((void(*)(id, SEL, UIApplication *, NSData*))original)(self, _cmd, application, deviceToken);
}
Swiftify 没有正确转换上述代码。
我尝试这样做,但我不确定如何在 Swift swizzling 方法中传递参数和使用上述参数。这是我在 Swift 中转换上述内容的失败尝试(代码甚至无法编译):
var MPApplicationDidRegisterForRemoteNotificationsWithDeviceToken: Void {
// TODO: MPPush.shared.app
let original = MPAppDelegateProxy.proxyAppDelegate.originalImplementation(selector: cmd, forClass: type(of: self))
}(self: Any, _cmd: Selector, application: UIApplication, deviceToken: Data)
【问题讨论】:
-
@Cristik:我不能用 Swift 做这个吗?
-
这个方法定义在什么类上?
-
@Cristik :因为它不是函数。 Objective-C 函数以 - 开头
-
@Cristik :那么,这应该只是一个简单的 Swift 函数吗?
标签: ios objective-c swift isa-swizzling