2016-07-15 33 views
5

Ich lese den Dancing in the Debugger — A Waltz with LLDB Artikel. Und ich versuche den Befehl thread return mit Swift 2.2 sowie Swift 3.0.LLDB 'Thread Return' Befehl gibt Fehler in einer Swift-Funktion aus

Mein Code ist ziemlich einfach:

class ViewController: UIViewController { 

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

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

und fügte ich einen Haltepunkt zu Beginn der test() Funktion mit einer thread return false Aktion. Nach Befehl + R stoppt mein Programm jedoch wie erwartet am Haltepunkt, aber mit dem folgenden Fehler:

"Fehler: Fehler beim Zurückkehren von Frame 0 von Thread 1: Wir unterstützen derzeit nur einfache Integer und Float-Return-Typen festlegen ..“

Hier ein Screenshot:

codesnapshot1

Dann habe ich versucht, das gleiche in Objective-C-Code; alles läuft gut.

+0

Swift 'Bool' s sind als eine Struktur implementiert, also ist es kein "einfacher Integer und Float-Return-Typ". Es funktioniert in ObjC, weil ein ObjC 'BOOL' nur eine Typdefinition eines primitiven Typs ist. – dan

+0

Ich habe 'thread return 10 (oder andere Nummer)' als Aktion versucht, das Programm stoppte jedoch immer noch mit dem gleichen Fehler. :( – oneMortale

+0

Vielleicht ist es implizit in booleschen Wert konvertiert, da Swift Thread-Container typsicher sind? – Leviathlon

Antwort

4

Dies sind bekannte Fehler. Die Werttypen in swift (Int, Bool usw.) sind allesamt komplexe Objekte, und wir haben lldb nicht beigebracht, wie sie die Rückgabewerte für sie überschreiben sollen. Fehlerbehandlung wird dies auch schwierig machen.

Im Allgemeinen erzwungene Rückkehr unsicher ist - um so mehr mit ARC und noch mehr mit Swift, da Sie Referenzzähler wahrscheinlich dem Gleichgewicht zu bringen sind -. Nicht nur auf Einheimischer, sondern möglicherweise auf Objekte in geben