2015-07-19 25 views
6

Jak mogę sprawdzić typ obiektu, którego moja zmienna jest w ios swift?Sprawdź typ obiektu ios swift

Na przykład

let test= ["Chicago", "New York", "Oregon", "Tampa"] 

jest badanie NSArray? NSMutableArray? NSString?

Jestem przyzwyczajony do wizualnego studia przy użyciu bezpośredniego okna, czy może to być tryb debugowania w Xcode?

+0

tutaj odpowiedzi: http://stackoverflow.com/questions/24093433/how-to-determine-the-type-of-a-variable-in-swift – sashab

Odpowiedz

8

Istnieje kilka metod określania typu obiektu w czasie debugowania lub kompilacji.


Jeśli typ zmiennej jest wyraźnie oświadczył, wystarczy spojrzeć na to:

let test: [String] = ["Chicago", "New York", "Oregon", "Tampa"] 

Tutaj test jest wyraźnie oznaczone jako [String] (SWIFT tablicy String s).


Jeśli typ zmiennej jest pośrednio wywnioskować, możemy uzyskać pewne informacje o ⌥ Option + kliknięcie.

let test = ["Chicago", "New York", "Oregon", "Tampa"] 

enter image description here

Tutaj widzimy test „s typ jest [String].


Możemy wydrukować typ obiektu przy użyciu dynamicType:

let test = ["Chicago", "New York", "Oregon", "Tampa"] 

println(test.dynamicType) 

Wydruki:

Swift.Array<Swift.String> 

Możemy również zobaczyć naszą zmienną zdaniem zmiennej:

enter image description here

Tutaj widzimy typ zmiennej wyraźnie w nawiasach: [String]


Również w punkcie przerwę, możemy zwrócić się do debuggera o zmiennej:

(lldb) po test 
["Chicago", "New York", "Oregon", "Tampa"] 

(lldb) po test.dynamicType 
Swift.Array<Swift.String> 
4

Możesz użyć is w Swift.

if test is NSArray { 
    println("is NSArray") 
} 
+0

problem i nie wiem typ zmiennej i chciałbym uniknąć wstawiania wielu instrukcji if.Czy mogę po prostu sprawdzić typ zmiennej podczas przechodzenia przez kod w trybie debugowania? jeśli tak, czy istnieje natychmiastowe okno w kodzie xcode? –

+0

@DevTonio W konsoli xCode możesz wydrukować wartości zmiennych według 'testu po'. Wyświetli informacje o obiekcie. –

1
type(of:) 

Która Zwraca dynamiczny typ wartości.

func foo<T>(x: T) -> T.Type { 
    return type(of: x) 
}