2016-08-15 2 views
0

Он отлично работает в OC:NSClassFromString хорошо работает в ОС, но врезается в Swift

NSString *controllerName = @"SecondViewController"; 
Class clazz = NSClassFromString(controllerName); 
UIViewController *viewController = [[clazz alloc] init]; 
[self.navigationController pushViewController:viewController animated:YES]; 

Когда я использую скор:

let controllerName = "SecondViewController" 
let controller:AnyClass = NSClassFromString(controllerName)! 
let viewController = (controller as! UIViewController.Type).init() 
navigationController?.pushViewController(viewController, animated: true) 

Он разбился на let controller:AnyClass = NSClassFromString(controllerName)!

Любые идеи?

enter image description here

+0

Что произойдет, если вы не принудительно разворачивать? Установлен ли 'controller' в' nil'? – Avi

+1

аналогичный пост http://stackoverflow.com/questions/24030814/swift-language-nsclassfromstring/32265287#32265287 – Khundragpan

+0

@ K.Nimo Спасибо за ваш облик! – Catoshi

ответ

0

Swift классы в пространстве имен теперь так вместо «SecondViewController» было бы «AppName.SecondViewController»

let nameSpace = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String 
    let controllerName = "SecondViewController" 
    let controller:AnyClass = NSClassFromString(nameSpace + "." + controllerName)! 
    let viewController = (controller as! UIViewController.Type).init() 
    navigationController?.pushViewController(viewController, animated: true) 
Смежные вопросы