Wklej Objective-C po lewej i kliknij "Konwertuj" — zamienimy to w XMLWklej kod Objective-C

Co robi to narzędzie

Jeśli kiedykolwiek musiałeś ręcznie sklecić ładunek XML pasujący do modelu Objective-C — dla starej usługi SOAP, pliku plist, konfiguracji Cocoa albo fixture’a testowego — znasz ten rytuał. Liczysz linie @property, zdejmujesz kwalifikatory typów, próbujesz zapamiętać, które są kontenerami NSArray, i trzymasz kciuki, żeby kształt był poprawny. Wklej tu Objective-C, a w jednym przebiegu dostaniesz poprawny XML. Pojedynczy snippet alloc/init, cały plik nagłówkowy z kilkoma blokami @interface albo głęboko zagnieżdżony model — wynik ten sam.

To nie jest naiwne podstawianie tekstu. Konwerter trzyma się tego, jak Cocoa faktycznie mapuje się na XML. Wartości NSString stają się węzłami tekstowymi (poprawnie zescape’owanymi). NSNumber i NSDecimalNumber tracą swoją otoczkę i stają się zwykłym tekstem liczbowym — więc [NSDecimalNumber decimalNumberWithString:@"249.99"] wychodzi jako 249.99. Wartości BOOL stają się true / false albo wariantem YES / NO, jeśli twój schemat tego oczekuje. NSArray<OrderItem *> staje się elementem-kontenerem z jednym dzieckiem na pozycję, nazwanym po typie elementu — dokładnie tą samą formą, którą emitują drzewa NSXMLElement.

Zaplecze ze zmiennymi instancji też jest ogarnięte. Jeśli twoje @property używa @synthesize customerName = _customerName;, element i tak nazywa się customerName, a nie _customerName — to nazewnictwo iVar to szczegół implementacyjny, nie część formatu przesyłu. Zagnieżdżone obiekty (Order z @property typu Address) są rozwijane w miejscu, a wartości nil stają się pustymi elementami, żeby kształt pozostał spójny. Jeśli wkleisz kilka bloków @interface, każdy z nich trafia do wyjścia. Wklej to tak, jak jest w twoim pliku .h — bez czyszczenia — i porównaj wynik z tym, co wygenerowałby NSXMLDocument.

Jak tego używać

Trzy kroki. Działa tak samo, czy wklejasz jedną klasę, czy cały komplet nagłówków.

1

Wklej swój Objective-C (albo wypróbuj przykład)

Wrzuć swój Objective-C do lewego edytora tak jak jest. Blok @interface, literal obiektu alloc/init, wiele klas albo typy zagnieżdżone — wszystko ok. Kliknij Wczytaj przykład, żeby najpierw zobaczyć realistyczny Order / OrderItem / Address.

Nie musisz zdejmować atrybutów @property, usuwać pragm ani czyścić importów. Zostaw kod tak, jak wygląda w Xcode. Parser wie, jak czytać prawdziwy plik .h lub .m.

2

Naciśnij Konwertuj

Kliknij zielony przycisk Konwertuj. Narzędzie czyta Objective-C, zachowuje każdą @property, utrzymuje zagnieżdżone obiekty i buduje XML w jednym przebiegu. W tle chodzi krótki wskaźnik ładowania.

3

Skopiuj XML

Prawy panel wypełni się wciętym, poprawnym XML-em, który przyjmie każdy zgodny ze standardami parser — również NSXMLParser. Skopiuj go do plista, do ciała żądania SOAP, do fixture’a testowego albo do dokumentacji.

Kiedy to naprawdę się przydaje

Budowa fixture’ów plist dla iOS

Masz model w Objective-C i potrzebujesz pasującego Info.plist albo plist-a seedującego dane. Wklej klasę, odbierz XML, wrzuć do bundle’a — żadnego ręcznego klepania par <code>&lt;dict&gt;</code> / <code>&lt;key&gt;</code>.

Pliki konfiguracyjne XML w Cocoa

Stare aplikacje desktopowe Cocoa wciąż wożą konfigurację w XML-u. Zamień swoją klasę <code>Settings</code> w gotowy do edycji szablon, żeby konfiguracja pasowała do kodu, który ją czyta.

Stare klienty SOAP / WCF na iOS

Jeśli twoja aplikacja iOS dalej rozmawia z endpointem SOAP, możesz wkleić klasę kontraktu żądania i dostać ciało envelope’a XML — łatwiej niż ręczne budowanie drzew <code>NSXMLElement</code>.

Karmienie przepływów XML w Mac OS

Stare integracje AppleScript / Automator / XML-RPC oczekują XML-a. Wklej model Objective-C, odbierz XML, podaj go do workflow — bez ręcznego tłumaczenia.

Częste pytania

Czy mogę wkleić kilka deklaracji @interface naraz?

Tak. Wklej cały plik nagłówkowy. Każdy @interface przechodzi z rozwiniętymi typami zagnieżdżonymi. Czy twój @interface deklaruje ivary jawnie (wewnątrz { }), czy korzysta z nowoczesnego stylu tylko-@property — oba warianty działają tak samo.

Jak traktowane są atrybuty @property?

Atrybuty takie jak (nonatomic, copy), (strong), (weak), (readonly) i (assign) to metadane dla runtime’u — nie zmieniają serializowanego kształtu. Nazwa elementu to nazwa property. Property readonly i tak są emitowane (mają wartość). Property obliczane z własnym getterem traktujemy tak samo jak każde inne.

A nazewnictwo iVar — dostanę elementy z _podkreśleniem?

Nie. Jeśli twoja property to customerName, a jej backing iVar to _customerName, element XML to <customerName>. Podkreślenie to konwencja Objective-C, nie format przesyłu. Jeśli chcesz zmienić nazwę elementu, zmień samą @property i wklej jeszcze raz.

Jak traktowane są NSString, NSNumber, NSDecimalNumber, BOOL i NSDate?

NSString staje się węzłem tekstowym z poprawnym escapem XML. NSNumber i NSDecimalNumber tracą otoczkę i stają się zwykłym tekstem liczbowym. BOOL staje się true / false (albo YES / NO, jeśli kod źródłowy używa konwencji plist). NSDate wychodzi jako łańcuch ISO-8601. Wartości nil zamieniają się w puste elementy, zamiast po prostu znikać.

A co z NSArray, NSDictionary i zagnieżdżonymi obiektami?

NSArray<OrderItem *> staje się elementem-kontenerem z jednym dzieckiem na pozycję, nazwanym po typie elementu: <items><OrderItem/><OrderItem/></items>. NSDictionary staje się kontenerem z <entry><key/><value/></entry>. Zagnieżdżone obiekty (property, której typ to kolejny @interface) są rozwijane w miejscu z nietkniętymi wszystkimi polami.

Czy mój kod jest zapisywany?

Twój kod trafia do backendu do konwersji i nie jest trwale zapisywany — nie logujemy zawartości. Jak zawsze przy narzędziach online, jeśli kod jest naprawdę wrażliwy, prześledź go, zanim wkleisz.

Inne narzędzia, które mogą się przydać

Objective-C do XML to tylko jeden element układanki. Te narzędzia dobrze do niego pasują: