ios - 当我使用数组时 Xcode 8 永远索引

标签 ios swift xcode indexing xcode8

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 修复的一个错误,但我已经更新到最新了,这仍然是一个问题。我想有一个解决方法,但这只是肮脏的。

最佳答案

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

你说如果你注释掉数组,索引就可以工作。但是您的buttonAppearance()函数内的for循环与数组直接相关,所以我不确定当您注释掉数组及其相关代码时到底索引了什么。

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

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

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

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

将按钮存储在函数外部的数组中,并在函数中循环访问数组。 希望有帮助。

关于ios - 当我使用数组时 Xcode 8 永远索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40475632/

相关文章:

swift - runAction() 内的变化值没有改变

ios - 在 Swift 中运行时更改自定义 UIView

ios - 选项卡式 iOS 应用程序中的单个选项卡不断崩溃

objective-c - 如何在 Xcode 4 中切换 .h 和 .m

ios - Xcode 说找不到代码签名身份

ios - 核心数据: 1 to many relation - no details saved

ios - Swift - 在 Markdown 中使用相对路径渲染图像

ios - SpriteKit Swift 动画一次只能在一个 Sprite 上 - iOS

ios - 在启动时显示的 UIDocumentBrowserViewController 之前呈现一个 View Controller

xcode - 将应用程序添加到App Store