Lim inn Objective-C til venstre og klikk "Konverter" — vi gjør det om til XMLLim inn Objective-C-kode

Det dette verktøyet gjør

Har du noen gang måttet snekre sammen en XML-payload for hånd som passer en Objective-C-modell — for en gammel SOAP-tjeneste, en plist-fil, en Cocoa-config eller en test-fixture — så kjenner du øvelsen. Du teller @property-linjer, river av typekvalifikatorer, prøver å huske hvilke som er NSArray-containere, og krysser fingrene for at formen stemmer. Lim inn Objective-C her, og du får velformet XML tilbake i ett jafs. En enslig alloc/init-snutt, en hel header-fil med flere @interface-blokker, eller en dypt nestet modell — samme resultat.

Dette er ingen naiv tekstbytting. Konverteren følger hvordan Cocoa faktisk mapper til XML. NSString-verdier blir til tekstnoder (korrekt escapet). NSNumber og NSDecimalNumber mister wrapperen og blir ren numerisk tekst — så [NSDecimalNumber decimalNumberWithString:@"249.99"] kommer ut som 249.99. BOOL-verdier blir til true / false, eller varianten YES / NO om skjemaet ditt vil ha det slik. NSArray<OrderItem *> blir et container-element med ett barn per item, oppkalt etter elementtypen — samme form som trær av NSXMLElement sender ut.

Backing via instansvariabler er også med. Bruker @property din @synthesize customerName = _customerName;, heter elementet fortsatt customerName, ikke _customerName — iVar-navnet er et implementasjonsdetalj, ikke en del av wire-formatet. Nestede objekter (en Order med en Address-@property) blir brettet ut på stedet, og nil-verdier blir tomme elementer så formen holder seg konsistent. Limer du inn flere @interface-blokker, havner alle i utdataene. Lim inn koden slik den står i .h-filen din — ingen opprydning nødvendig — og sammenlign resultatet med det NSXMLDocument ville produsert.

Slik bruker du det

Tre trinn. Funker likt uansett om du limer inn én klasse eller en hel bunke med headere.

1

Lim inn Objective-C-en din (eller prøv eksempelet)

Slipp Objective-C-en din i venstre editor slik den er. En @interface-blokk, en alloc/init-objektliteral, flere klasser eller nestede typer — alt går. Klikk Last eksempel for å se et realistisk Order / OrderItem / Address-eksempel først.

Du trenger ikke å fjerne @property-attributter, ta ut pragmas eller rydde i import-linjene. La koden være slik den ser ut i Xcode. Parseren kan lese en ekte .h- eller .m-fil.

2

Trykk Konverter

Klikk på den grønne Konverter-knappen. Verktøyet leser Objective-C-en, beholder hver @property, tar vare på nestede objekter og bygger XML-en i ett jafs. En kort lasteindikator snurrer imens.

3

Kopier XML-en

Høyre panel fyller seg med innrykket, velformet XML som enhver standardkompatibel parser — inkludert NSXMLParser — godtar. Kopier den inn i en plist, en SOAP-request-body, en test-fixture eller dokumentasjonen din.

Når dette virkelig hjelper

Lage plist-fixtures for iOS

Du har en Objective-C-modell og trenger en matchende Info.plist eller seed-plist. Lim inn klassen, hent ut XML-en, slipp den i bundlet — ingen håndskrevne <code>&lt;dict&gt;</code> / <code>&lt;key&gt;</code>-par.

Cocoa XML-konfigurasjonsfiler

Gamle desktop-Cocoa-apper sender fremdeles med XML-config. Gjør <code>Settings</code>-klassen din om til en klar-til-å-redigere-mal så konfigurasjonen matcher koden som leser den.

Legacy SOAP- / WCF-klienter på iOS

Snakker iOS-appen din fortsatt med et SOAP-endepunkt, kan du lime inn kontraktsklassen for requesten og få XML-envelope-bodyen — enklere enn å bygge <code>NSXMLElement</code>-trær for hånd.

Mate Mac OS XML-arbeidsflyter

Gamle AppleScript- / Automator- / XML-RPC-integrasjoner forventer XML. Lim inn Objective-C-modellen, hent XML-en, send den inn i arbeidsflyten — ingen manuell oversettelse.

Vanlige spørsmål

Kan jeg lime inn flere @interface-deklarasjoner på én gang?

Ja. Lim inn en hel header-fil. Hver @interface kommer gjennom med nestede typer brettet ut. Enten @interface-en din deklarerer ivars eksplisitt (inni { }) eller bruker den moderne bare-@property-stilen, fungerer begge likt.

Hvordan håndteres @property-attributter?

Attributter som (nonatomic, copy), (strong), (weak), (readonly) og (assign) er metadata for runtimen — de endrer ikke den serialiserte formen. Elementnavnet er navnet på propertyen. readonly-properties sendes ut likevel (de har fortsatt en verdi). Beregnede properties med egne getters behandles som en hvilken som helst annen property.

Og iVar-navning — får jeg elementer med _understrek?

Nei. Hvis propertyen din heter customerName og backing-iVar-en er _customerName, blir XML-elementet <customerName>. Understreken er en Objective-C-konvensjon, ikke et wire-format. Vil du døpe om et element, så bytt navn på selve @property og lim inn på nytt.

Hvordan behandles NSString, NSNumber, NSDecimalNumber, BOOL og NSDate?

NSString blir til en tekstnode med korrekt XML-escape. NSNumber og NSDecimalNumber mister wrapperen og blir til ren numerisk tekst. BOOL blir til true / false (eller YES / NO om kildekoden bruker plist-konvensjonen). NSDate kommer ut som en ISO-8601-streng. nil-verdier blir tomme elementer i stedet for å bli droppet.

Hva med NSArray, NSDictionary og nestede objekter?

NSArray<OrderItem *> blir et container-element med ett barn per item, oppkalt etter elementtypen: <items><OrderItem/><OrderItem/></items>. NSDictionary blir en container med <entry><key/><value/></entry>. Nestede objekter (en property hvis type er et annet @interface) brettes ut på stedet med alle felter intakte.

Blir koden min lagret?

Koden din sendes til backenden for konverteringen og blir ikke lagret — vi logger ikke payloaden. Som alltid med nettbaserte verktøy: er koden virkelig sensitiv, se over den før du limer inn.

Andre verktøy du kanskje trenger

Objective-C til XML er bare én brikke i puslespillet. Disse verktøyene passer godt sammen med det: