Objective-C iOS-kehitys vanhoille ja yrityssovelluksille · Oppitunti

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.

Oppitunti 2/412 vaihetta

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 ole final-luokkia, tuovat jäsenensä automaattisesti näkyviin.
  • Joillekin jäsenille voidaan tarvita @objc-attribuuttia, jos luokka ei peri NSObject-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 String yhdistetään tyyppiin NSString*
  • Swiftin Int-, Double- ja Bool-tyypit yhdistetään tyyppiin NSNumber*
  • Swiftin Array yhdistetään tyyppiin NSArray*
  • Swiftin Dictionary yhdistetään tyyppiin NSDictionary*

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, Array ja Dictionary, yhdistetään automaattisesti niitä vastaaviin NS-tyyppeihin.

Tämä siltaus on olennaisen tärkeä monikielisten iOS-projektien ylläpidossa ja kehittämisessä!

Aloita maksutta

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

  1. Objective-C:n ja Swiftin yhdistäminen
  2. Swiftin ja Objective-C:n yhdistäminen
  3. Objective-C-frameworkien luominen
  4. Tyhjyyden ja tyyppien käsittely sillan yli
← Takaisin: Objective-C iOS-kehitys vanhoille ja yrityssovelluksille