Динамическое создание экземпляра класса Obj C в Swift (с NSClassFromString?) - PullRequest
1 голос
/ 09 июля 2020

У меня есть класс Obj C с методом инициализации

-(instancetype) initWithApiKey: (NSString *) key order: (NSNumber *) order

В Obj C я динамически создаю его со следующим кодом:

id classAllocation = [NSClassFromString(@"MyClass") alloc];
NSObject * classInstance = [classAllocation performSelector:@selector(initWithApiKey:order:) 
withObject:@"mykey" withObject:@1];

Но как бы Я делаю то же самое в Swift?

1 Ответ

2 голосов
/ 10 июля 2020

Попробуйте следующее:

if let allocatedObject = NSClassFromString("MyClass")?.alloc() as? NSObject {
    let selector: Selector = NSSelectorFromString("initWithApiKey:order:")
    let methodIMP: IMP! = allocatedObject.method(for: selector)
    let objectAfterInit = unsafeBitCast(methodIMP,to:(@convention(c)(AnyObject?,Selector,NSString,NSNumber)->NSObject).self)(allocatedObject,selector,"mykey", NSNumber(integerLiteral: 1))
}

Дополнительные примеры с подробностями в моем ответе здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...