2016-07-15 29 views
5

Czytam artykuł Dancing in the Debugger — A Waltz with LLDB. I próbuję polecenia thread return z Swift 2.2, a także Swift 3.0.Polecenie 'powrót wątku' LLDB wysyła błąd w funkcji Swift

Mój kod jest dość prosty:

class ViewController: UIViewController { 

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

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

i dodałem przerwania na początku funkcji test() z thread return false działania. Jednak po poleceniu + R mój program zatrzymuje się w punkcie przerwania zgodnie z oczekiwaniami, ale z następującym błędem:

"błąd: Błąd powrotu z ramki 0 wątku 1: Obsługujemy tylko ustawienie prostych typów zwracanych całkowitych i zmiennoprzecinkowych w chwili obecnej ..”

Poniżej zrzut ekranu:

codesnapshot1

Potem próbowałem to samo w kodzie Objective-C; wszystko poszło dobrze.

+0

Swift 'Bool' s są zaimplementowane jako struct, więc nie jest to "prosty typ zwracający liczbę całkowitą i zmiennoprzecinkowy". Działa w ObjC, ponieważ "BOOL" ObjC jest typedefem typu pierwotnego. – dan

+0

Próbowałem 'powrotu wątku 10 (lub innej liczby)' jako akcji, jednak program nadal zatrzymywał się z tym samym błędem. :( – oneMortale

+0

Być może jest on niejawnie przekonwertowany na wartość boolowską, ponieważ pojemniki z wątkami Swift są bezpieczne dla typów? – Leviathlon

Odpowiedz

4

To są znane błędy. Typy wartości w swift (Int, Bool itp.) Są obiektami złożonymi, a my nie nauczyliśmy lldb, jak nadpisać dla nich wartości zwracane. Obsługa błędów również sprawi, że będzie to trudne.

Ogólnie przymusowe powroty są niebezpieczne - bardziej z ARC, a jeszcze bardziej z Swift, ponieważ jest prawdopodobne, aby asymetrii liczy referencyjnych. - nie tylko na mieszkańców, ale potencjalnie obiektów przekazanych w