【问题标题】:Error when passing an int EXC_BREAKPOINT(code=1 Swift Xcode ios传递 int EXC_BREAKPOINT(code=1 Swift Xcode ios) 时出错
【发布时间】:2015-02-17 13:03:06
【问题描述】:

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

我也尝试将 var 设置为具有相同结果的计数器

我收到以下错误: swift_dynamicCastObjCClassUnconditional

完全错误: 线程 1:EXC_BREAKPOINT(code=1, subcode=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;

【问题讨论】:

    标签: ios swift for-loop


    【解决方案1】:

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

    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。向下转换将无法编译。

    【讨论】:

    • 谢谢!那行得通,我现在也明白为什么
    • 现在有三种类型的演员表,我因此更新了我的答案。
    【解决方案2】:

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

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

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

    【讨论】:

    • 全局 enumerate 函数返回一个带有索引和对象的元组。我没有在 Swift 文档中看到索引的类型
    • 索引取自thingState的声明。我想这类似于[String:AnyObject] 而不是[Int:AnyObject]。所以编译器采用String。如果你使用Int(...) 投射它应该没问题。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多