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.
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
NSObjectog ikke erfinal, eksponerer automatisk deres medlemmer. - Du kan få brug for
@objctil bestemte medlemmer, hvis din klasse ikke nedarver fraNSObject(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
StringtilknyttesNSString* - Swift
Int,Double,BooltilknyttesNSNumber* - Swift
ArraytilknyttesNSArray* - Swift
DictionarytilknyttesNSDictionary*
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
NSObjectfor at kunne ses af Objective-C. - Attributten
@objceksponerer udtrykkeligt medlemmer eller omdøber dem. - Swift-typer som
String,ArrayogDictionarytilknyttes automatisk deresNS-modstykker.
Denne brokobling er afgørende for at vedligeholde og videreudvikle iOS-projekter med flere programmeringssprog!
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
- Bridging fra Objective-C til Swift
- Bridging fra Swift til Objective-C
- Oprettelse af Objective-C-frameworks
- Håndtering af nullability og typemapping på tværs af broen