Skip to main content
 首页 » 操作系统

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

2024年01月01日43bluestorm

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

我也试过将 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; 

请您参考如下方法:

你要确保你的 View 是按钮,否则它将无法转换你的 View 。

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 可以用作向上转换,例如 CAShapeLayer 到 CALayer 或其他特殊情况,例如 [NSObject:AnyObject] 到 NSDictionary。使沮丧将无法编译。