Swiftin ja Objective-C:n yhdistäminen
Opitte tuomaan Swift-koodin Objective-C:n käytettäväksi automaattisesti generoidun Objective-C generated headerin kautta.
Swiftin ja Objective-C:n yhdistäminen on ilmainen Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-kurssilla on yhteensä 4 oppituntia.
Swiftistä Obj-C:hen: silta
Tervetuloa! Monikielisissä projekteissa Swift-koodin on usein keskusteltava Objective-C-koodin kanssa. Tässä oppitunnissa keskitytään siihen, miten nykyaikaiset Swift-luokat ja -metodit tehdään vanhempien Objective-C-tiedostojen käytettäviksi.
Tämän "sillan" ansiosta voit ottaa Swiftin vähitellen käyttöön olemassa olevassa Objective-C-koodikannassa tai kirjoittaa sovelluksen eri osia eri kielillä.
Automaattisesti luotu otsikkotiedosto
Kun lisäät Swift-tiedostoja Objective-C-projektiin, Xcode luo sinulle automaattisesti erityisen otsikkotiedoston. Sen nimi on ProductModuleName-Swift.h.
Tämä otsikkotiedosto toimii kääntäjänä ja tuo Swift-koodisi Objective-C:n saataville. Sinun ei tarvitse luoda sitä, sillä Xcode hoitaa kaiken! Sinun tarvitsee vain importoida se.
Swift-luokkien tuominen näkyviin
Jotta Objective-C-tiedosto voi "nähdä" Swift-luokan, kyseisen Swift-luokan on perittävä NSObject. Tämä on Objective-C-yhteensopivuuden perusedellytys.
Jos luokka ei peri NSObject-luokkaa, Swift-luokkasi ei näy automaattisesti luodussa bridging headerissa.
@objc:n käyttäminen näkyvyyteen
@objc-attribuutti merkitsee Swift-määrittelyn (luokan, metodin, ominaisuuden tai alustajan) nimenomaisesti Objective-C:n käytettäväksi.
NSObject-luokasta perivät luokat, jotka eivät olefinal-luokkia, tuovat jäsenensä automaattisesti näkyviin.- Joillekin jäsenille voidaan tarvita
@objc-attribuuttia, jos luokka ei periNSObject-luokkaa (esimerkiksi protokollan kautta) tai jos ominaisuuksilta tai metodeilta edellytetään KVC/KVO-yhteensopivuutta.
Yksinkertainen Swift-luokka
Tässä on Swift-luokka MySwiftGreeter, joka perii NSObject-luokan. Sen name-ominaisuus ja greet()-metodi tuodaan automaattisesti Objective-C:n käytettäviksi.
Voimme halutessamme käyttää @objc(MySwiftGreeter)-merkintää määrittääksemme Objective-C-nimen, vaikka nimi päätellään usein automaattisesti.
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)!"
}
}Swift-otsikkotiedoston importointi
Jotta voit käyttää Swift-luokkiasi Objective-C-tiedostossa, sinun tarvitsee vain importoida automaattisesti luotu bridging header. Korvaa ProductModuleName projektisi todellisella moduulin nimellä.
Importin tulee olla Objective-C:n .m-toteutustiedostossa, ei .h-otsikkotiedostossa. Näin vältetään kehäriippuvuudet ja tarpeeton näkyvyys.
// In MyObjectiveCFile.m
#import "YourProjectName-Swift.h"
// Now you can use MySwiftGreeter
// ...Swiftin käyttäminen Obj-C:ssä
Kun bridging header on importoitu, Objective-C-koodisi voi luoda Swift-luokkien ilmentymiä ja käsitellä niiden näkyviin tuotuja ominaisuuksia ja metodeja aivan kuten minkä tahansa muun Objective-C-objektin kanssa.
Huomautus: Tämä koodikatkelma näyttää, miltä koodi näyttäisi projektissa. Sen suorittaminen suoraan edellyttää täydellistä Xcode-projektia, jossa on sekä Swift- että Objective-C-tiedostoja.
#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;
}Swiftin ja Obj-C:n tyyppikartta
Siltauksessa Swift-tyypit yhdistetään automaattisesti niitä lähimpänä vastaaviin Objective-C-tyyppeihin:
- Swiftin
Stringyhdistetään tyyppiinNSString* - Swiftin
Int-,Double- jaBool-tyypit yhdistetään tyyppiinNSNumber* - Swiftin
Arrayyhdistetään tyyppiinNSArray* - Swiftin
Dictionaryyhdistetään tyyppiinNSDictionary*
Tämä mahdollistaa sujuvan tiedonsiirron kielten välillä.
Obj-C-nimien mukauttaminen
Joskus Swiftin luokalle tai metodille päättelemä Objective-C-nimi ei ole ihanteellinen tai se voi aiheuttaa ristiriidan. Voit antaa mukautetun Objective-C-nimen käyttämällä merkintää @objc(NewName).
Tämä on erityisen hyödyllistä, jos sinun on noudatettava olemassa olevia Objective-C:n nimeämiskäytäntöjä tai vältettävä ristiriitoja olemassa olevien Objective-C-symbolien kanssa.
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)!"
}
}Siltaamisen rajoitukset
Kaikkia Swiftin ominaisuuksia ei voi tuoda suoraan Objective-C:n käytettäviksi. Pidä seuraavat rajoitukset mielessä:
- Swiftin struct- ja enum-tyypit: Ne eivät näy suoraan, ellei niillä ole raw-arvoja ja ne ole
@objc-yhteensopivia. - Generics: Swiftin geneerisiä tyyppejä ei tuoda näkyviin.
- Globaalit funktiot: Vain
NSObject-luokasta johdettujen luokkien sisäiset metodit sillataan. - Tuplet: Swiftin tupleille ei ole Objective-C-vastinetta.
Keskity luokkiin, metodeihin ja ominaisuuksiin, jotka vastaavat Objective-C:n objektimallia.
Siltaamisen tietotarkistus
Mikä seuraavista vaaditaan, jotta Swift-luokka on Objective-C-koodin käytettävissä automaattisesti luodun bridging headerin kautta?
Swiftin siltaaminen Obj-C:hen
Olet oppinut, miten Swift-koodi tehdään Objective-C:n saataville! Tärkeimmät asiat:
- Xcode luo
ProductModuleName-Swift.h-otsikkotiedoston. - Swift-luokkien on perittävä
NSObject, jotta Objective-C näkee ne. @objc-attribuutti tuo jäsenet nimenomaisesti näkyviin tai nimeää ne uudelleen.- Swift-tyypit, kuten
String,ArrayjaDictionary, yhdistetään automaattisesti niitä vastaaviinNS-tyyppeihin.
Tämä siltaus on olennaisen tärkeä monikielisten iOS-projektien ylläpidossa ja kehittämisessä!
Opi Objective-C tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”Swiftin ja Objective-C:n yhdistäminen” ilmainen?
Kyllä – oppitunnin ”Swiftin ja Objective-C:n yhdistäminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-kurssin, päivitä CoddyKit PROhon. Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Swiftin ja Objective-C:n yhdistäminen”?
Opitte tuomaan Swift-koodin Objective-C:n käytettäväksi automaattisesti generoidun Objective-C generated headerin kautta. Harjoittelet Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Swiftin ja Objective-C:n yhdistäminen”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-oppitunnilla?
Kyllä. Jokainen Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Objective-C:n ja Swiftin yhdistäminen
- Swiftin ja Objective-C:n yhdistäminen
- Objective-C-frameworkien luominen
- Tyhjyyden ja tyyppien käsittely sillan yli