2016-07-15 33 views
5

Dancing in the Debugger — A Waltz with LLDB makalesini okuyorum. Ve Swift 2.2 yanı sıra Swift 3.0 ile thread return komutunu deniyorum.LLDB 'thread return' komutu, Swift işlevinde hata yayar

Kodum oldukça basittir:

class ViewController: UIViewController { 

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

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

ve ben bir thread return false eylem ile test() işlevi başında bir kesme noktası eklendi. Ancak, + R komutundan sonra, programım beklendiği gibi kesme noktasında durur, ancak aşağıdaki hata ile birlikte:

"hata: 1. iş parçacığının 0 numaralı karesinden dönen hata: Yalnızca şu anda basit tamsayı ve float dönüş türlerinin ayarlanmasını destekliyoruz .." İşte

bir ekran görüntüsü var:

codesnapshot1

Sonra Objective-C kodunda aynı çalıştı; her şey iyi gidiyor.

+0

Swift 'Bool' s bir yapı olarak uygulanır, bu nedenle "basit bir tam sayı ve float dönüş tipi" değildir. ObjC'de çalışır, çünkü ObjC 'BOOL' ilkel tipte bir yazımdır. – dan

+0

İş parçacığı dönüşünü 10 (ya da başka bir sayı) 'i eylem olarak denedim, ancak program yine aynı hatayla durdu. :( – oneMortale

+0

Belki Swift iş parçacığı kasaları güvenli olduğu için dolaylı olarak boole değerine dönüştürülür? – Leviathlon

cevap

4

Bunlar bilinen hatalardır. Hızlı (Int, Bool, vb.) Değer türleri tüm karmaşık nesnelerdir ve biz lldb'ye, onlar için geri dönüş değerlerinin nasıl üzerine yazılacağını öğretmedik. Hata yönetimi de bunu zorlaştırır. Genelde

, zorla gönderilme güvensiz - ARC ile ve daha çok Swift ile daha çok, referans sayıları dengesizlik muhtemeldir beri -. halk üzerinde ancak potansiyel geçirilen nesneler üzerinde sadece