Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer · Lektion

Bridging fra Swift til Objective-C

Lær at gøre Swift-kode tilgængelig fra Objective-C via den automatisk genererede Objective-C-header.

Lektion 2 af 412 trin

Bridging fra Swift til Objective-C er en gratis Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer-kurset indeholder 4 lektioner i alt.

Swift til Obj-C: Broen

Velkommen! I projekter med flere programmeringssprog har du ofte brug for, at Swift-kode kommunikerer med Objective-C-kode. Denne lektion fokuserer på at gøre dine moderne Swift-klasser og -metoder tilgængelige for ældre Objective-C-filer.

Denne "brokobling" gør det muligt gradvist at indføre Swift i en eksisterende Objective-C-kodebase eller at have dele af din app skrevet i forskellige sprog.

Den automatisk genererede header

Når du tilføjer Swift-filer til et Objective-C-projekt, genererer Xcode automatisk en særlig headerfil for dig. Den hedder ProductModuleName-Swift.h.

Denne header fungerer som en oversætter, der gør din Swift-kode synlig for Objective-C-verdenen. Du skal ikke oprette den; Xcode klarer alt arbejdet! Du skal blot importere den.

Eksponering af Swift-klasser

For at en Objective-C-fil kan "se" en Swift-klasse, skal Swift-klassen nedarve fra NSObject. Det er et grundlæggende krav for kompatibilitet med Objective-C.

Hvis den ikke nedarver fra NSObject, vises din Swift-klasse ikke i den automatisk genererede brokoblingsheader.

Brug af @objc til synlighed

Attributten @objc markerer udtrykkeligt en Swift-deklaration (klasse, metode, egenskab eller initialisering) som tilgængelig for Objective-C.

  • Klasser, der nedarver fra NSObject og ikke er final, eksponerer automatisk deres medlemmer.
  • Du kan få brug for @objc til bestemte medlemmer, hvis din klasse ikke nedarver fra NSObject (f.eks. via en protokol), eller til egenskaber og metoder, der kræver KVC/KVO-kompatibilitet.

En simpel Swift-klasse

Her er en Swift-klasse, MySwiftGreeter, der nedarver fra NSObject. Dens name-egenskab og greet()-metode bliver automatisk eksponeret for Objective-C.

Vi kan valgfrit bruge @objc(MySwiftGreeter) til at angive Objective-C-navnet, selv om det ofte udledes 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)!"
    }
}

Import af Swift-headeren

Hvis du vil bruge dine Swift-klasser i en Objective-C-fil, skal du blot importere den automatisk genererede brokoblingsheader. Erstat ProductModuleName med det faktiske modulnavn for dit projekt.

Denne import skal være i din Objective-C-implementeringsfil .m, ikke i en .h-headerfil, for at undgå cirkulære afhængigheder og unødig eksponering.

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

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

Brug af Swift i Obj-C

Når brokoblingsheaderen er importeret, kan din Objective-C-kode oprette instanser af Swift-klasser og arbejde med deres eksponerede egenskaber og metoder ligesom med ethvert andet Objective-C-objekt.

Bemærk: Dette kodestykke viser, hvordan det ville se ud i et projekt. Hvis du vil køre det direkte, kræver det et komplet Xcode-projekt 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;
}

Typetilknytning mellem Swift og Obj-C

Ved brokobling tilknyttes Swift-typer automatisk til deres nærmeste Objective-C-modstykker:

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

Det giver mulighed for problemfri dataudveksling mellem de to sprog.

Tilpasning af Obj-C-navne

Nogle gange er det Objective-C-navn, som Swift udleder for en klasse eller metode, ikke ideelt, eller det kan være i konflikt med et andet navn. Du kan angive et brugerdefineret Objective-C-navn ved hjælp af @objc(NewName).

Det er især nyttigt, hvis du skal følge eksisterende Objective-C-navngivningskonventioner eller undgå konflikter 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)!"
    }
}

Begrænsninger ved brokobling

Ikke alle Swift-funktioner kan eksponeres direkte for Objective-C. Husk disse begrænsninger:

  • Swift-strukturer og enumereringer: De er ikke direkte synlige, medmindre de har råværdier og overholder @objc.
  • Generiske typer: Swift-generiske typer eksponeres ikke.
  • Globale funktioner: Kun metoder i klasser, der nedarver fra NSObject, brokobles.
  • Tupler: Swift-tupler har ingen tilsvarende Objective-C-type.

Fokuser på klasser, metoder og egenskaber, der svarer til Objective-Cs objektmodel.

Vidensquiz om brokobling

Hvad af følgende er PÅKRÆVET, for at en Swift-klasse kan tilgås fra Objective-C-kode via den automatisk genererede brokoblingsheader?

Brokobling fra Swift til Obj-C

Du har lært, hvordan du gør din Swift-kode tilgængelig for Objective-C! De vigtigste pointer:

  • Xcode genererer en ProductModuleName-Swift.h-header.
  • Swift-klasser skal nedarve fra NSObject for at kunne ses af Objective-C.
  • Attributten @objc eksponerer udtrykkeligt medlemmer eller omdøber dem.
  • Swift-typer som String, Array og Dictionary tilknyttes automatisk deres NS-modstykker.

Denne brokobling er afgørende for at vedligeholde og videreudvikle iOS-projekter med flere programmeringssprog!

Gratis at komme i gang

Lær Objective-C med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Bridging fra Swift til Objective-C” gratis?

Ja — hele teksten til “Bridging fra Swift til Objective-C” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer-kurset, skal du opgradere til CoddyKit PRO. Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Bridging fra Swift til Objective-C”?

Lær at gøre Swift-kode tilgængelig fra Objective-C via den automatisk genererede Objective-C-header. Du øver dig i Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer?

Der kræves ingen tidligere erfaring. Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Bridging fra Swift til Objective-C”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer-lektion?

Ja. Alle Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Bridging fra Objective-C til Swift
  2. Bridging fra Swift til Objective-C
  3. Oprettelse af Objective-C-frameworks
  4. Håndtering af nullability og typemapping på tværs af broen
← Tilbage til Objective-C-udvikling til iOS med ældre og virksomhedsapplikationer