不能动态引用视图控制器的名称



当instantiateViewController我想动态引用类的故事板标识符是基于一个条件配对。我能够在实例化时传递图像文字的字符串名称,但不是viewController swift类?我得到的错误是Cannot find type 'viewControllers' in scope

例如:

var tabImage: String?
var viewControllers: UIViewController?

let tabBarController = CBFlashyTabBarController()
tabBarController.viewControllers = filteredNavigation.map { arrayProperty -> UIViewController in
if (arrayProperty.navname == "View1") {
print("View1")
tabImage = "tab1"
viewControllers = ViewController1
}
else if (arrayProperty.navname == "View2") {
print("View2")
tabImage = "tab2"
viewControllers = ViewController2
}

那么我可以在实例化时传递条件的结果:

let controller = storyboard!.instantiateViewController(withIdentifier: String(arrayProperty.navigationid)) as! viewControllers
controller.view.backgroundColor = UIColor.white
controller.navigationItem.title = arrayProperty.navname
controller.tabBarItem = UITabBarItem(title: arrayProperty.navname, image: #imageLiteral(resourceName: tabImage!), tag: 0)
controllerArray.append(controller)
return controller

这一行:

let controller = storyboard!.instantiateViewController(withIdentifier: String(arrayProperty.navigationid)) as! viewControllers

Swift需要在编译时为变量controller分配一个类型。该类型必须是明确的。

"as!"后必须为类型名。这里你给出了一个变量(所以它不是一个类型名——正是错误消息告诉你的),你似乎希望在运行时改变这个值,而类型必须在编译时确定。

总之,你要做的事不能那样做。

更重要的是,这段代码不会编译:

class ViewController1 : UIViewController {
}
var viewControllers : UIViewController?
viewControllers = ViewController1

声明viewControllers是对UIViewController实例的引用(可选引用)。ViewController1是一个,而不是一个实例,所以这会产生一个编译错误:

不能分配类型为'ViewController1 '的值。打字对打字ui的

相关内容

  • 没有找到相关文章

最新更新