【问题标题】:Downcast from UITabBarItem? to UITabBarItem only unwraps optionals; did you mean to use '!' Error从 UITabBarItem 垂头丧气?到 UITabBarItem 只打开选项;你的意思是用'!'错误
【发布时间】:2015-09-30 14:36:32
【问题描述】:

我的代码在Xcode6 中运行良好。但是,在更新到Xcode7 后,我收到了近 20 个错误和 50 个警告。这可能是 Swift 2 中的一些语法更改

解决了所有这些问题,但无法弄清楚这一点:来自UITabBarItem 的垂头丧气?到UITabBarItem 只解开选项;你的意思是用'!' 下面是实际代码:

let tabItems = tabBar.items as! [UITabBarItem]  // Error in  this line
for (index, value) in enumerate(tabItems)
{
    var imageName = imageNames[index]
    value.image = UIImage(named: imageName)
    value.imageInsets = UIEdgeInsetsMake(5.0, 0, -5.0, 0)
}

它显示了 1 个错误

当我尝试这样做时:

if let tabItems = tabBar.items as [UITabBarItem]? {
for (index, value) in tabItems.enumerate()
{
    var imageName = imageNames[index]
    value.image = UIImage(named: imageName)
    value.imageInsets = UIEdgeInsetsMake(5.0, 0, -5.0, 0)
}
}

它显示了 5 个错误::

  1. “_UTTypeCopyPreferredTagWithClass”,引用自:Parse(PFFile.o) 中的-[PFFile _mimeType] 2.“_UTTypeCreatePreferredIdentifierForTag”,引用自:Parse(PFFile.o) 中的-[PFFile _mimeType] 3.“_kUTTagClassFilenameExtension”,引用来自:-[PFFile _mimeType] in Parse(PFFile.o) 4."_kUTTagClassMIMEType",引用自:-[PFFile _mimeType] in Parse(PFFile.o) ld:未找到架构 x86_64 5.clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

请帮忙!提前致谢

【问题讨论】:

  • 为什么不只是if let tabItems = tabBar.items {
  • 我认为这 5 个错误与您的代码无关。您是否与 MobileCoreServices 库链接? (如果没有,添加它会修复这些错误吗?)
  • 它显示了 5 个错误!和上面提到的一样。 1.“_UTTypeCopyPreferredTagWithClass”,引用自:Parse(PFFile.o)中的-[PFFile_mimeType] 2.“_UTTypeCreatePreferredIdentifierForTag”,引用自:Parse(PFFile.o)中的-[PFFile_mimeType] 3.“_kUTTagClassFilenameExtension”,引用自: - [PFFile _mimeType] in Parse(PFFile.o) 4."_kUTTagClassMIMEType", 引用自: - [PFFile _mimeType] in Parse(PFFile.o) ld: 未找到架构 x86_64 5.clang 的符号: 错误: 链接器命令失败,退出代码为 1(使用 -v 查看调用)
  • 没有。我没有添加 MobileCoreServices 库。但是,我不知道为什么这里的一切都不同。当我点击我的项目名称(左窗格)时,我可以看到信息和构建设置就是这样。我不明白这些 General、Capabilities、Resource Tags、Build Phases、Build Rules 等等都去了哪里。有人知道这里有什么问题吗?谢谢
  • 缺少选项卡意味着您正在查看项目设置而不是目标设置。 (切换到中间窗格中的目标。)

标签: xcode swift parse-platform swift2 xcode7


【解决方案1】:

如果有一些 TabBarItems,tabBar.items 将返回一个 UITabBarItem 数组。如果不是,它将返回 nil(它是可选的)。 因此,将其再次转换为 [UITabBarItem] 将是“愚蠢的”。这就像在说:我有很多苹果,用它做一些苹果。但是您需要处理 tabBar.items 为零的情况。所以你只需要通过添加“!”来解开 tabBar.items像这样:

 let tabItems = tabBar.items! 

这应该可行:)

【讨论】:

  • NO :( 。现在,它显示两个错误:: 1.'enumerate' 不可用:序列上的所有 enumerate() 方法和 2. 无法使用参数列表调用 'enumerate'输入“(UITabBarItem)”
  • for (index, value) in enumerate(tabItems)
  • 您必须在第二段代码中使用 for .. in 循环,因为全局函数 enumerate 在 Swift 2 中已被替换。
  • 一个错误:条件绑定的初始化程序必须具有 Optional 类型,而不是 let tabItems = tabBar.items 中的 '[UITabBarItem]'!行
  • 我不确定,但尝试简单地删除“!”。所以 tabItems 是一个可选的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 2018-10-31
  • 2019-02-13
  • 2018-01-01
相关资源
最近更新 更多