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 {
// ...
}