【发布时间】:2020-10-29 23:48:43
【问题描述】:
我有一个带有 init 方法的 ObjC 类
-(instancetype) initWithApiKey: (NSString *) key order: (NSNumber *) order
在 ObjC 中,我使用以下代码动态创建它:
id classAllocation = [NSClassFromString(@"MyClass") alloc];
NSObject * classInstance = [classAllocation performSelector:@selector(initWithApiKey:order:)
withObject:@"mykey" withObject:@1];
但是我如何在 Swift 中做同样的事情呢?
【问题讨论】:
-
出于好奇——你为什么要这样做?为什么不简单地调用初始化程序?还是 rhi 只是问题的简化示例?
-
你不能直接从 Swift 调用它吗? developer.apple.com/documentation/foundation/… 你需要展示你在 Swift 中究竟尝试了什么以及它是如何失败的。
-
你不需要在 ObjC 中使用 performSelector,顺便说一句。您可以拨打
[[NSClassFromString(@"MyClass") alloc] initWithApiKey:@"mykey" order:@1]。您可以使用来自 Swift 的空初始化程序(来自 Swift 的let classObject = NSClassFromString("MyClass"); let classInstance = classObject.init()动态创建对象,但不确定您是否可以通过这种方式执行任何任意 init 方法。您可能需要实现一个包装函数或类方法,然后将其桥接并从 Swift 调用.
标签: ios objective-c swift3