LoginSignup
1
1

More than 5 years have passed since last update.

asが失敗したときのXCode(β版)の挙動について

Last updated at Posted at 2014-06-26

asが失敗すると EXC_BAD_INSTRUCTION シグナルが上がって落ちますが、
XCodeが違う所で落ちたような見た目になることがありました。

確認したバージョンは XCode6-Beta2 です。

追記:Appleへバグ報告済みです。

// as 失敗で違う場所にエラー表示が出るサンプル
func Hoge() -> AnyObject {
    return NSObject()
}

func Fuga() {
    var x = "abc"
    switch x {
    case "abc":
        println(x)  // ここで落ちたみたいな表示が出る
    default:
        println("default")
    }

    let a = Hoge() as NSInteger // ほんとはココで落ちてる
}

Fuga()

違うケースでも同じような見た目になることがあります。
今回はSwift + Cocoaでいろいろ試している時だったので
なかなか何が起きているのかわかりませんでした。

(対策)as?を使う

失敗するかもしれないキャストには as? を使うようにします。

// as の場合
var dic  = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.AllowFragments, error: nil) as NSDictionary

// 失敗したら終わり
// as? の場合
var dic  = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.AllowFragments, error: nil) as? NSDictionary

// 失敗したか調べられる
if dic {
    // ...
}
1
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1