Konwerter Objective-C do XML
Wklej interfejsy lub obiekty Objective-C. Odbierz czysty XML.
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.
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.
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.
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><dict></code> / <code><key></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ą: