预期序列表达式 swift 3

Expected Sequence expression swift 3

我正在使用一个循环来设置标签栏项目的原始图像,因此未选中状态不是灰色(我的原始图标是白色)。但是,最近的 Xcode 8 更新似乎破坏了代码:

for (items in 0  ..< tabBar.items!.count ){
    let tabItemIndex = tabBar.items![items]
    tabItemIndex.image = tabItemIndex.image!.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
}

}

我在第一行收到以下错误:Expected 'in' after for-each patternExpected Sequence expression for for-each loopExpected pattern

谁能帮我解决这个问题?直到今天它都很好用。

谢谢!!

您在创建循环和一些非常不安全的强制解包方面遇到了一些问题。试试这个:

if let items = tabBar.items {
    for tabBarItem in items {
        if let image = tabBarItem.image {
            tabBarItem.image = image.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
        }
    }
}

或者更干净,像这样:

tabBar.items?.forEach { tabBarItem in
    if let image = tabBarItem.image {
        tabBarItem.image = image.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
    }
}

在Swift中,与Objective-C不同,这个结构中没有括号。删除括号以修复语法错误。

但是,除了语法错误之外,这里还存在风格和安全问题:请参阅 picciano 的回答以获取更清晰、更安全的重写循环的方法。

for x in y 是 Swift 中的实际表达式。您不能用括号 for (x in y) 将其分开 — 它将 forin 分开,并导致表达式对编译器来说似乎是无意义的。

所以,去掉括号,一切都会好起来的。