Koble Swift til Objective-C
Lær å gjøre Swift-kode tilgjengelig fra Objective-C gjennom den automatisk genererte Objective-C-headeren.
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
NSObjectog ikke erfinal, eksponerer automatisk medlemmene sine. - De kan trenge
@objcfor bestemte medlemmer hvis klassen ikke arver fraNSObject(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
Stringtilordnes tilNSString* - Swift
Int,Double,Booltilordnes tilNSNumber* - Swift
Arraytilordnes tilNSArray* - Swift
Dictionarytilordnes tilNSDictionary*
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
NSObjectfor å kunne sees av Objective-C. - Attributtet
@objceksponerer medlemmer uttrykkelig eller gir dem nye navn. - Swift-typer som
String,ArrayogDictionarytilordnes automatisk til de tilsvarendeNS-typene.
Denne brobyggingen er avgjørende for å vedlikeholde og videreutvikle iOS-prosjekter som bruker flere språk!
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
- Koble Objective-C til Swift
- Koble Swift til Objective-C
- Opprette Objective-C-rammeverk
- Håndtere nullabilitet og typetilordning på tvers av broen