Objective-C iOS-utvikling for eldre kodebaser og virksomhetsapper · leksjon

Koble Swift til Objective-C

Lær å gjøre Swift-kode tilgjengelig fra Objective-C gjennom den automatisk genererte Objective-C-headeren.

Leksjon 2 av 412 trinn

Koble Swift til Objective-C er en gratis leksjon i Objective-C iOS-utvikling for eldre kodebaser og virksomhetsapper på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Objective-C iOS-utvikling for eldre kodebaser og virksomhetsapper, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Objective-C iOS-utvikling for eldre kodebaser og virksomhetsapper inneholder totalt 4 leksjoner.

Swift til Obj-C: Broen

Velkommen! I prosjekter som bruker flere språk, trenger De ofte at Swift-kode kommuniserer med Objective-C-kode. Denne leksjonen fokuserer på å gjøre moderne Swift-klasser og -metoder tilgjengelige for eldre Objective-C-filer.

Denne «brobyggingen» gjør det mulig å gradvis introdusere Swift i en eksisterende Objective-C-kodebase, eller å ha deler av appen skrevet i forskjellige språk.

Den automatisk genererte headeren

Når De legger til Swift-filer i et Objective-C-prosjekt, genererer Xcode automatisk en spesiell headerfil for Dem. Den heter ProductModuleName-Swift.h.

Denne headeren fungerer som en oversetter og eksponerer Swift-koden Deres for Objective-C-verdenen. De oppretter den ikke selv; Xcode gjør hele jobben! De trenger bare å importere den.

Eksponere Swift-klasser

For at en Objective-C-fil skal kunne «se» en Swift-klasse, må Swift-klassen arve fra NSObject. Dette er et grunnleggende krav for kompatibilitet med Objective-C.

Hvis klassen ikke arver fra NSObject, vises den ikke i den automatisk genererte bridging-headeren.

Bruke @objc for synlighet

Attributtet @objc markerer uttrykkelig en Swift-deklarasjon (klasse, metode, egenskap eller initializer) som tilgjengelig for Objective-C.

  • Klasser som arver fra NSObject og ikke er final, eksponerer automatisk medlemmene sine.
  • De kan trenge @objc for bestemte medlemmer hvis klassen ikke arver fra NSObject (for eksempel via en protokoll), eller for egenskaper og metoder som krever KVC/KVO-kompatibilitet.

En enkel Swift-klasse

Her er en Swift-klasse, MySwiftGreeter, som arver fra NSObject. Egenskapen name og metoden greet() blir automatisk eksponert for Objective-C.

De kan eventuelt bruke @objc(MySwiftGreeter) for å angi Objective-C-navnet, selv om navnet ofte utledes automatisk.

import Foundation

class MySwiftGreeter: NSObject {
    @objc var name: String

    @objc init(name: String) {
        self.name = name
        super.init()
    }

    @objc func greet() -> String {
        return "Hello from Swift, \(name)!"
    }
}

Importere Swift-headeren

For å bruke Swift-klassene Deres i en Objective-C-fil trenger De bare å importere den automatisk genererte bridging-headeren. Erstatt ProductModuleName med det faktiske modulnavnet til prosjektet Deres.

Denne importen bør ligge i Objective-C-implementasjonsfilen .m, ikke i en .h-headerfil, for å unngå sirkulære avhengigheter og unødvendig eksponering.

// In MyObjectiveCFile.m
#import "YourProjectName-Swift.h"

// Now you can use MySwiftGreeter
// ...

Bruke Swift i Obj-C

Når bridging-headeren er importert, kan Objective-C-koden Deres opprette instanser av Swift-klasser og samhandle med de eksponerte egenskapene og metodene deres, akkurat som med ethvert annet Objective-C-objekt.

Merk: Dette kodeeksempelet viser hvordan det ville sett ut i et prosjekt. For å kjøre det direkte kreves et komplett Xcode-prosjekt med både Swift- og Objective-C-filer.

#import <Foundation/Foundation.h>
#import "MyProjectName-Swift.h" // Your project's auto-generated header

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // Create an instance of the Swift class
        MySwiftGreeter *greeter = [[MySwiftGreeter alloc] initWithName:@"Coddy"];

        // Call a method on the Swift object
        NSString *greeting = [greeter greet];
        NSLog(@"%@", greeting);

        // Access a property
        NSLog(@"Greeter's name: %@", greeter.name);
    }
    return 0;
}

Typetilordning mellom Swift og Obj-C

Ved brobygging tilordnes Swift-typer automatisk til de nærmeste tilsvarende Objective-C-typene:

  • Swift String tilordnes til NSString*
  • Swift Int, Double, Bool tilordnes til NSNumber*
  • Swift Array tilordnes til NSArray*
  • Swift Dictionary tilordnes til NSDictionary*

Dette gjør det mulig å utveksle data sømløst mellom de to språkene.

Tilpasse Obj-C-navn

Noen ganger er Objective-C-navnet Swift utleder for en klasse eller metode, ikke ideelt, eller det kan komme i konflikt med et annet navn. De kan angi et egendefinert Objective-C-navn ved å bruke @objc(NewName).

Dette er spesielt nyttig hvis De må følge eksisterende Objective-C-navnekonvensjoner eller unngå navnekollisjoner med eksisterende Objective-C-symboler.

import Foundation

@objc(LegacyGreeter) // Renames MySwiftGreeter to LegacyGreeter for Obj-C
class MySwiftGreeter: NSObject {
    @objc var name: String

    @objc(initWithPersonName:) // Custom name for initializer
    init(name: String) {
        self.name = name
        super.init()
    }

    @objc(sayHello) // Custom name for method
    func greet() -> String {
        return "Hello from Swift, \(name)!"
    }
}

Begrensninger ved brobygging

Ikke alle Swift-funksjoner kan eksponeres direkte for Objective-C. Vær oppmerksom på disse begrensningene:

  • Swift-strukturer og enum-er: De er ikke direkte synlige med mindre de har råverdier og samsvarer med @objc.
  • Generiske typer: Swift-generiske typer eksponeres ikke.
  • Globale funksjoner: Bare metoder i klasser som er derivert fra NSObject, kan brobygges.
  • Tupler: Swift-tupler har ingen tilsvarende Objective-C-type.

Fokuser på klasser, metoder og egenskaper som gjenspeiler Objective-Cs objektmodell.

Kunnskapskontroll: Brobygging

Hva av det følgende er et KRAV for at en Swift-klasse skal være tilgjengelig fra Objective-C-kode via den automatisk genererte bridging-headeren?

Brobygge Swift til Obj-C

De har lært hvordan De gjør Swift-koden Deres tilgjengelig for Objective-C! Viktige punkter:

  • Xcode genererer en ProductModuleName-Swift.h-header.
  • Swift-klasser må arve fra NSObject for å kunne sees av Objective-C.
  • Attributtet @objc eksponerer medlemmer uttrykkelig eller gir dem nye navn.
  • Swift-typer som String, Array og Dictionary tilordnes automatisk til de tilsvarende NS-typene.

Denne brobyggingen er avgjørende for å vedlikeholde og videreutvikle iOS-prosjekter som bruker flere språk!

Gratis å komme i gang

Lær deg Objective-C med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «Koble Swift til Objective-C» gratis?

Ja – hele teksten i «Koble Swift til Objective-C» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Objective-C iOS-utvikling for eldre kodebaser og virksomhetsapper-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Objective-C iOS-utvikling for eldre kodebaser og virksomhetsapper inneholder totalt 4 leksjoner.

Hva lærer jeg i «Koble Swift til Objective-C»?

Lær å gjøre Swift-kode tilgjengelig fra Objective-C gjennom den automatisk genererte Objective-C-headeren. Du øver på Objective-C iOS-utvikling for eldre kodebaser og virksomhetsapper med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Objective-C iOS-utvikling for eldre kodebaser og virksomhetsapper?

Ingen tidligere erfaring er nødvendig. Objective-C iOS-utvikling for eldre kodebaser og virksomhetsapper på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Koble Swift til Objective-C»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Objective-C iOS-utvikling for eldre kodebaser og virksomhetsapper-leksjonen?

Ja. Alle Objective-C iOS-utvikling for eldre kodebaser og virksomhetsapper-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Koble Objective-C til Swift
  2. Koble Swift til Objective-C
  3. Opprette Objective-C-rammeverk
  4. Håndtere nullabilitet og typetilordning på tvers av broen
← Tilbake til Objective-C iOS-utvikling for eldre kodebaser og virksomhetsapper