2014-06-27 12 views
19

Czy istnieje odpowiednik Swift dla obiektu Objective-C @encode?Swift odpowiednik kodu @encode

Na przykład

@encode(void *) // -> @"^v" 

Searching nic nie dały.

+1

biorąc pod uwagę, że [nie możemy nawet użyć introspekcji do określenia typu obiektu] (http://stackoverflow.com/questions/24101450/how-do-you-find-out-the-type-of- an-object-in-swift), wątpię, by pojawił się szybki odpowiednik - ale w głównej mierze, ponieważ jeśli znajdziesz rozwiązanie, które zapewni przynajmniej punkt wyjścia w moim pytaniu o introspekcję;) – Jiaaro

+1

Dlaczego tego potrzebujesz? Czy możesz wyjaśnić kontekst? Może istnieć dobra alternatywa Swift do tego, co próbujesz zrobić. –

+0

@ St3fan Myślę, że to dobre pytanie, ale w kontekście, cf. pierwszy blok kodu w [tej odpowiedzi SO] (http://stackoverflow.com/a/24456115/45813) –

Odpowiedz

4

Nie, nie ma - ponieważ pod maską klasy Swift nie używają introspekcji Objective-C do wykonywania swojej pracy. Nie ma potrzeby obliczania tego (tak jak w Objective-C) w celu przekazania/wywołania danych.

Jeśli jednak chcesz używać go dynamicznie w środowisku wykonawczym (na przykład do współdziałania z istniejącymi metodami Objective-C), możesz utworzyć wywołanie Objective-C i przekazać obiekt do lub (dla typów prostych) napisać tablica przeglądowa.

Typ kodowania są wymienione na https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html, które mają mapę, i można napisać instrukcję typu przełącznika, która wykonuje wyszukiwanie.

Ale zasadniczo, jeśli masz typ, który chcesz przejść i znaleźć to cel typu c kodowania, można skorzystać z NSObject za metodę objCType:

var i = 1 as NSNumber 
String.fromCString(i.objCType)! == "q" 

Jeśli chcesz przekazać ją poprzez jako unmolested Mimo to ciąg C nie musi nawet konwertować go z powrotem na ciąg znaków Swift.

+3

"objctype" to metoda 'NSValue', a nie' NSObject'. –

Powiązane problemy