在Swift

时间:2016-08-26 16:02:26

标签: ios swift for-loop

我试图在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循环语句中插入“,”作为分隔符。任何人都可以看到它的错误吗?

4 个答案:

答案 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循环中删除括号,然后在0self之间添加适当的间距: -

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..中的额外空格,并考虑打开链中可选计数的值。