不明白为什么Swift要求我显式声明

3

我正在测试Swift,但不理解为什么以下代码无法正常工作。

    let tabBarController = UITabBarController()
    tabBarController.viewControllers = [MyViewController1(), MyTableViewController2()]

    tabBarController.tabBar.items[0].title = "First"
    tabBarController.tabBar.items[1].title = "Second"

编译器告诉我:找不到成员"title"

如果将参数拆分为多个变量,则可以解决这个问题。

    let tabBarController = UITabBarController()
    tabBarController.viewControllers = [MyViewController1(), MyTableViewController2()]

    let tabBar = tabBarController.tabBar 
    let tabBarItem0 = tabBar.items[0] as UITabBarItem
    let tabBarItem1 = tabBar.items[1] as UITabBarItem

    tabBarItem0.title = "First"
    tabBarItem1.title = "Second"

有人能解释一下为什么第一个版本不起作用吗?
谢谢。
1个回答

8

正如您所意识到的,tabBar.items 是一个由 AnyObject 组成的数组,本质上是 id。您需要像使用 as UITabBarItem 一样对其进行向下转换。

一种更好的方式,也是推荐的方式,是在开始访问之前将整个数组向下转换。代码看起来会像这样:

let tabItems = tabBar.items as [UITabBarItem]
tabItems[0].title = "First"
//...

啊 - 好的。谢谢 - 我会再看一下向下转换部分。 - Joseph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接