传递 int EXC_BREAKPOINT(code=1 Swift Xcode ios 时出错

Error when passing an int EXC_BREAKPOINT(code=1 Swift Xcode ios

在 for 循环中将 let 变量作为标记传递时出现错误,但当我用数字替换变量时却没有出现错误。我可以 println(i) 和 return 一个数字。 为什么不接受它作为密钥?

我也试过将 var 设置为计数器,结果相同

我在以下方面遇到错误: swift_dynamicCastObjCClassUnconditional

全部错误: 线程 1:EXC_BREAKPOINT(代码=1,子代码=0x1001ee4b0)

   func updateThing() {
    for (i, img) in enumerate(thingState) {
        switch img  {
        case 0:
            image = UIImage(named: "0.png");
             break
        case 1:
            image = UIImage(named: "1.png");
             break
        case 2:
            image = UIImage(named: "2.png");
             break
        default:
            image = UIImage(named: "x.png");
        }
    thing = self.view.viewWithTag(i) as UIButton;
    thing.setImage(image, forState: .Normal);
    }

但是如果我用数字替换 i 则没有错误,并且带有指定标签的图像会发生变化,如果我 println(i) 我每次通过都会得到一个数字

thing = self.view.viewWithTag(2) as UIButton;

你要确保你的视图是按钮,否则它将无法投射你的视图。

func updateThing() {
    for (i, img) in enumerate(thingState) {
        switch img  {
        case 0:
            image = UIImage(named: "0.png");
             break
        case 1:
            image = UIImage(named: "1.png");
             break
        case 2:
            image = UIImage(named: "2.png");
             break
        default:
            image = UIImage(named: "x.png");
        }
        if let thing = self.view.viewWithTag(i) as? UIButton {
             thing.setImage(image, forState: .Normal)
        }
    }
}

可选的转换运算符 (as?) 优于转换运算符 (as),因为它不会在转换失败时使您的应用程序崩溃。

哦,分号在 Swift 中没用 :)

编辑:

在最新的Swift版本中,as已被as!取代,但as仍然存在。

  • as! 用于在没有检查的情况下强制施放并且容易出现裂纹。你主要用它来向下转换,你绝对确定对象的类型。
  • as 可以用作向上转换,例如 CAShapeLayerCALayer 或其他特殊情况,例如 [NSObject:AnyObject]NSDictionary。使downcast编译失败。

问题是您没有声明 i,而是从 thingState 隐含地获取它。没有看到后者的声明很难说,但我想你需要做

thing = self.view.viewWithTag(Int(i)) as UIButton

是的:分号是多余的;以及 break

这个问题是你误删了按钮。 并且您必须看到您的 StoryBoard 屏幕或 Xib 文件。 我想你删除了按钮。

我遇到了同样的问题,我尝试了 Shift+Cmd+K 清理项目并解决了问题