我试图在Swift中迭代一组ViewControllers,但不幸的是我收到了我不理解的编译错误。这是我的相关代码:
let alertController = UIAlertController(title: "Error", message: "You have an error.", preferredStyle: .Alert)
let OKAction = UIAlertAction(title: "OK", style: .Default) { (action:UIAlertAction!) in
print("you have pressed OK button");
//below is my loop causing me trouble
for (i in 0..< self.navigationController?.viewControllers.count) {
if (self.navigationController?.viewControllers[i].isKindOfClass(MyViewController) == true) {
self.navigationController?.popToViewController(self.navigationController!.viewControllers[i] as! MyViewController, animated: true)
break;
}
}
}
alertController.addAction(OKAction)
self.presentViewController(alertController, animated: true, completion:nil)
但是,我不断收到来自Xcode的错误,要求我在for循环语句中插入“,”作为分隔符。任何人都可以看到它的错误吗?
答案 0 :(得分:3)
不是使用数字for循环,为什么不在语法中使用for?
if let navController = self.navigationController {
for aVC in navController.viewControllers {
if aVC..isKindOfClass(MyViewController) {
navController.popToViewController(aVC, animated: true)
break
}
}
}
我使用可选绑定将self.navigationController?
折叠为navController,并将...折叠为语法。
另外,我认为您不需要将视图控制器转换为MyViewController
类,因为您正在使用它将其发送到popToViewController函数,该函数需要UIViewController
。< / p>
如果需要数组中项目的索引,可以使用数组上的enumerate
函数,该函数返回一组元组:
for (index, aVC) in navController.viewControllers.enumerate() {
//Do stuff
}
答案 1 :(得分:2)
只需从for循环中删除括号,然后在0
和self
之间添加适当的间距: -
for i in 0 ..< self.navigationController?.viewControllers.count {
if(self.navigationController?.viewControllers[i].isKindOfClass(MyViewController) == true) {
self.navigationController?.popToViewController(self.navigationController!.viewControllers[i] as! MyViewController, animated: true)
break;
}
}
答案 2 :(得分:1)
..<
周围的间距不一致。
您必须选择0 ..< self.
或0..<self.
,否则运营商将被视为前缀/后缀运算符,而不是中缀运算符。
此外,for-in
由两个表达式组成:
for expr1 in expr2
因此,您无法将关键字in
包含在括号中:
for i in (0 ..< self.navigationController?.viewControllers.count) {
答案 3 :(得分:0)
从for-in
循环中移除括号,0..< self..
中的额外空格,并考虑打开链中可选计数的值。