【问题标题】:Xcode 8 indexing forever when I use an array当我使用数组时,Xcode 8 永远索引
【发布时间】:2017-03-21 09:55:31
【问题描述】:
func buttonAppearance() {
    let buttons = [buttonOneView, buttonTwoView, buttonThreeView, buttonFourView, buttonFiveView, buttonSixView, buttonSevenView, buttonEightView, buttonNineView, buttonTenView, buttonElevenView, buttonTwelveView, previousButtonView, skipButtonView, submitButtonView]
    for button in buttons {
        button?.layer.cornerRadius = 5.0
        button?.layer.shadowOffset = CGSize(width: 2.0, height: 2.0)
        button?.layer.shadowColor = UIColor.red.cgColor
        button?.layer.shadowOpacity = 1.0

    }
}

每当我注释掉数组和与之相关的任何代码时,索引都会完成,我可以正常运行和构建。有其他人对此有任何问题吗?我研究并发现这是 Xcode 8.1 修复的错误,但我都是最新的,它仍然是一个问题。我想有一个解决方法,但这很脏。

【问题讨论】:

  • 尝试给它一个明确的类型注释——例如参见stackoverflow.com/questions/28411298/…。如果这不起作用,则完全摆脱数组文字并附加每个元素,请参阅stackoverflow.com/questions/26494082/…
  • 看来您将为所有按钮提供相同的外观,因此最好创建一个自定义类,它是 UIButton 的子类,并在 init() 方法中添加上述属性。然后转到故事板并将这个自定义类分配为按钮的类。
  • 谢谢大家!显式声明似乎可以解决问题!虽然,你是对的,Karthick,但我肯定会制作一个自定义类。这将显着清理代码!再次感谢!

标签: ios swift xcode indexing xcode8


【解决方案1】:

删除按钮后的可选问号。 在您的数组中,您拥有与循环将通过的一样多的项目。 所以您知道“按钮”将作为迭代器存在于您的数组中,因为您在其中有项目并且您正在循环它。

您说,如果您注释掉数组,索引就会起作用。但是您在 buttonAppearance() 函数中的 for 循环与数组直接相关,因此当您注释掉数组及其相关代码时,我不确定究竟会索引什么。

要问自己的一个重要问题是您放置在数组中的项目的数据类型,以及如果您在数组中扩展任何按钮对象,是否需要遵守某些协议。 当然,for 循环适用于原始数据类型,所以如果它不是可选(隐式/显式)处理的问题 - 那么请检查您放置在该数组中的对象的类型。

要考虑的另一件事 - 您是在每次调用函数时都尝试创建按钮数组(例如更改外观主题),还是尝试引用一些已经存在的全局按钮?在这种情况下 - 在函数外部声明按钮数组,然后循环遍历函数内部的数组。

另一方面,如果您打算仅在调用函数时创建按钮并且它们在全局函数之外不存在,您将提供有关对象及其类型的更多信息。

在我看来,您在函数外部全局定义了按钮,并且您试图将它们全部存储在一个数组中只是为了循环它们 - 在这种情况下,我建议删除可选的“?”

将按钮存储在数组中 - 在函数之外并在函数中循环遍历数组。 希望对您有所帮助。

【讨论】:

  • 我所说的注释数组的意思实际上是注释掉函数的主体(没有数组,函数的其余部分将无法工作)。所以基本上当我有一个空函数时,索引问题就会解决。这些按钮确实是一个全局定义的集合,我在调用函数时将它们放在数组中。然而,似乎简单地显式声明数组类型也解决了索引问题。也就是说,您的建议使我更改了一些有助于使我的代码更清晰的事情!非常感谢您帮助这个新手!
【解决方案2】:

尝试像这样显式声明数组类型:

 let buttons: [UIButton] = [buttonOneView, buttonTwoView, buttonThreeView, buttonFourView ... ]

这可能是 Swift 类型推断系统的问题。

【讨论】:

  • 完成!这解决了它。谢谢!
猜你喜欢
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-27
相关资源
最近更新 更多