2016-07-15 4 views
5

私はDancing in the Debugger — A Waltz with LLDBの記事を読んでいます。そして私はSwift 3.0と同様にSwift 2.2でthread returnコマンドを試しています。LLDB 'thread return'コマンドはSwift関数でエラーを出します

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     let resust = test() 
     print(resust) 
    } 

    func test() -> Bool { 
     return true 
    } 
} 

と私はthread return falseアクションでtest()関数の先頭にブレークポイントを追加しました:

私のコードは非常に単純です。しかし、コマンド+ Rの後、私のプログラムはブレークポイントで停止し、次のエラーで停止します。

"エラー:スレッド1のフレーム0からのエラーを返しています:現在のところ、単純な整数型と浮動小数点型それから私は、Objective-Cのコードで同じことをしようとした

codesnapshot1

;:..」

は、ここでのスクリーンショットですすべてがうまくいく。

+0

スウィフト 'Bool' sは構造体として実装されているため、「単純な整数型と浮動小数点型」ではありません。 ObjCの 'BOOL'はプリミティブ型のtypedefなので、ObjCで動作します。 – dan

+0

'thread return 10(または他の番号)'をアクションとして試しましたが、プログラムは同じエラーで停止しました。 : – oneMortale

+0

スウィフトスレッドコンテナはタイプセーフなので、おそらくブール値に暗黙的に変換されますか? – Leviathlon

答えて

4

これは既知のバグです。 swift(Int、Boolなど)の値の型はすべて複雑なオブジェクトで、lldbに戻り値を上書きする方法は教えていません。エラー処理はまた、このトリッキーになります。一般的に

、強制リターンは安全ではない - ARCとし、それ以上にスウィフトとより多くのように、あなたが参照カウントをアンバランスする可能性があるので、 - 。地元の人々ではなく、潜在的に渡されたオブジェクト上だけではなく

関連する問題