Objective-C iOS-kehitys vanhoille ja yrityssovelluksille · Oppitunti

Protokollat ja kategoriat

Tutustukaa viestintäsopimusten määrittämiseen tarkoitettuihin protokolliin ja kategorioihin, joilla metodeja voidaan lisätä olemassa oleviin luokkiin ilman aliluokitusta.

Oppitunti 3/411 vaihetta

Protokollat ja kategoriat on ilmainen Objective-C iOS-kehitys vanhoille ja yrityssovelluksille-oppitunti CoddyKitissä. Tämä on oppitunti 3/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.

Toiminnallisuuden laajentaminen: johdanto

Tervetuloa Objective-C:n protokollia ja kategorioita käsittelevään oppituntiin! Nämä ovat tehokkaita ominaisuuksia, joiden avulla luokkien toiminnallisuutta voi laajentaa joustavasti.

Tutkimme, miten protokollat määrittelevät olioiden välisen viestinnän sopimuksia ja miten kategorioiden avulla olemassa oleviin luokkiin voi lisätä metodeja ilman aliluokan luomista.

Protokollat: viestinnän sopimus

Ajatelkaa Objective-C:n protokollaa pohjapiirroksena tai sopimuksena. Se ilmoittaa luettelon metodeista, jotka muut luokat voivat halutessaan toteuttaa.

  • Protokollan omaksuva luokka lupaa toteuttaa sen pakolliset metodit.
  • Tämä on tärkeää viestintämallien, kuten suositun delegointimallin, muodostamisessa.
  • Protokollat muistuttavat Java- ja C#-kielten rajapintoja.

Protokollan määrittäminen

Protokolla määritellään @protocol-direktiivillä. Metodit voi määrittää @required-metodeiksi (toteutus on pakollinen) tai @optional-metodeiksi (toteutus on valinnainen).

Protokollat noudattavat usein <NSObject>-protokollaa, mikä tarkoittaa, että kaikkien sen omaksuvien luokkien on oltava Objective-C-olioita.

@protocol MyServiceDelegate <NSObject>
@required
- (void)serviceDidFinishLoadingData:(NSArray *)data;
@optional
- (void)serviceDidStartRequest;
@end

Protokollan omaksuminen ja toteuttaminen

Luokka omaksuu protokollan ilmoittamalla sen kulmasulkeissa yliluokan jälkeen. Tämän jälkeen sen on toteutettava kaikki @required-metodit.

Katsotaan esimerkkiä, jossa DataLoader-luokka tarvitsee delegaatin ilmoittamaan sille, milloin tiedot ovat valmiit.

#import <Foundation/Foundation.h>

// 1. Define the delegate protocol
@protocol DataLoaderDelegate <NSObject>
- (void)dataLoader:(id)loader didFinishLoadingData:(NSString *)data;
- (void)dataLoaderDidFail:(id)loader withError:(NSError *)error;
@end

// 2. Class that uses the delegate
@interface MyDataLoader : NSObject
@property (nonatomic, weak) id<DataLoaderDelegate> delegate; // The delegate property
- (void)loadData;
@end

@implementation MyDataLoader
- (void)loadData {
    NSLog(@"DataLoader: Starting data load...");
    // Simulate network request
    NSString *result = @"Sample Data Loaded!";

    // Notify the delegate
    if ([self.delegate respondsToSelector:@selector(dataLoader:didFinishLoadingData:)]) {
        [self.delegate dataLoader:self didFinishLoadingData:result];
    }
}
@end

// 3. Class that conforms to the protocol (the delegate)
@interface MyDataConsumer : NSObject <DataLoaderDelegate> // Adopting the protocol
- (void)startConsumption;
@end

@implementation MyDataConsumer
- (void)startConsumption {
    MyDataLoader *loader = [[MyDataLoader alloc] init];
    loader.delegate = self; // Set self as the delegate
    [loader loadData];
}

#pragma mark - DataLoaderDelegate Methods
- (void)dataLoader:(id)loader didFinishLoadingData:(NSString *)data {
    NSLog(@"DataConsumer: Received data: %@", data);
}

- (void)dataLoaderDidFail:(id)loader withError:(NSError *)error {
    NSLog(@"DataConsumer: Failed with error: %@", error.localizedDescription);
}
@end

// 4. Main execution
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        MyDataConsumer *consumer = [[MyDataConsumer alloc] init];
        [consumer startConsumption];
    }
    return 0;
}

Kategoriat: luokkien laajentaminen

Kategoriat tarjoavat tavan lisätä uusia metodeja olemassa olevaan luokkaan, myös luokkaan, jota ette itse hallitse (kuten NSString tai NSObject), muuttamatta sen alkuperäistä lähdekoodia tai luomatta aliluokkaa.

  • Ne sopivat erinomaisesti koodin järjestämiseen loogisiin kokonaisuuksiin.
  • Luokkaan ei voi lisätä uusia instanssimuuttujia kategorian avulla.
  • Jos kategorian metodilla on sama nimi kuin olemassa olevalla metodilla, käytetään kategorian toteutusta (tämä voi aiheuttaa odottamatonta toimintaa!).

Kategorian määrittäminen

Kategoria määritellään luomalla rajapintatiedosto (.h) ja toteutustiedosto (.m). Syntaksi näyttää tältä:

@interface ClassName (CategoryName)

Luodaan NSString-luokalle kategoria, johon lisätään joitakin apumetodeja.

// NSString+MyStringAdditions.h
#import <Foundation/Foundation.h>

@interface NSString (MyStringAdditions)
- (BOOL)isEmailValid;
- (NSString *)stringByCapitalizingFirstLetter;
@end

Kategorian metodien toteuttaminen

Toteutetaan nyt NSString+MyStringAdditions-kategoriassa ilmoittamamme metodit. Kun nämä metodit on toteutettu, ne ovat käytettävissä kaikissa NSString-instansseissa!

Kokeilkaa esimerkin suorittamista nähdäksenne, miten se toimii:

#import <Foundation/Foundation.h>

// 1. Define the Category Interface
@interface NSString (MyStringAdditions)
- (NSString *)stringWithPrependedHello;
- (NSString *)stringWithAppendedExclamation;
@end

// 2. Implement the Category Methods
@implementation NSString (MyStringAdditions)
- (NSString *)stringWithPrependedHello {
    return [NSString stringWithFormat:@"Hello, %@", self];
}

- (NSString *)stringWithAppendedExclamation {
    return [NSString stringWithFormat:@"%@!", self];
}
@end

// 3. Main execution
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *name = @"CoddyKit";
        
        // Use category methods
        NSString *greeting = [name stringWithPrependedHello];
        NSString *excitedGreeting = [greeting stringWithAppendedExclamation];

        NSLog(@"Original: %@", name);
        NSLog(@"Greeting: %@", greeting);
        NSLog(@"Excited: %@", excitedGreeting);
    }
    return 0;
}

Milloin protokollia ja milloin kategorioita käytetään

On tärkeää tietää, milloin protokollat ja milloin kategoriat kannattaa valita:

  • Protokollat: Käyttäkää niitä, kun haluatte määrittää yhteisen rajapinnan tai sopimuksen, jota useat toisiinsa liittymättömät luokat voivat noudattaa (esim. delegointimalli tai tietolähteet). Ne määrittävät, mitä olio voi tehdä.
  • kategoriat: Käyttäkää niitä, kun haluatte lisätä apumetodeja olemassa olevaan luokkaan, ryhmitellä toisiinsa liittyviä metodeja tai laajentaa luokkaa ilman aliluokittelua (esim. mukautetun jäsennysmetodin lisääminen NSString-luokkaan). Ne laajentavat sitä, miten olio voi toimia.

Protokollat ja periytyminen

Protokolla voi myös omaksua muita protokollia, jolloin muodostuu vaatimusketju. Esimerkiksi @protocol ChildProtocol <ParentProtocol> tarkoittaa, että ChildProtocol sisältää kaikki ParentProtocol-protokollan metodit.

Näin voitte rakentaa monimutkaisempia sopimuksia yhdistämällä yksinkertaisempia sopimuksia.

Pikatarkistus: protokollat

Tarkastelkaa seuraavaa Objective-C-koodikatkelmaa:

@protocol DataProcessor @required - (void)processData:(NSArray *)data; @optional - (void)didStartProcessing; @end

Mikä on tämän protokollan ensisijainen tarkoitus?

Kertaus: protokollat ja kategoriat

Hienoa! Tässä oppitunnissa opitte kahdesta tehokkaasta Objective-C:n ominaisuudesta:

  • Protokollat: Määrittävät metodisopimuksen, jonka luokat voivat omaksua viestinnän mahdollistamiseksi ja yhteisten rajapintojen muodostamiseksi.
  • Kategoriat: Laajentavat olemassa olevia luokkia lisäämällä niihin uusia metodeja ilman periytymistä. Niistä on hyötyä apufunktioissa ja koodin järjestämisessä.

Kun hallitsette nämä ominaisuudet, pystytte rakentamaan joustavampia ja modulaarisempia Objective-C-sovelluksia!

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 ”Protokollat ja kategoriat” ilmainen?

Kyllä – oppitunnin ”Protokollat ja kategoriat” 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 ”Protokollat ja kategoriat”?

Tutustukaa viestintäsopimusten määrittämiseen tarkoitettuihin protokolliin ja kategorioihin, joilla metodeja voidaan lisätä olemassa oleviin luokkiin ilman aliluokitusta. 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 3/4.

Kuinka kauan ”Protokollat ja kategoriat”-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. Luokat, oliot ja metodit
  2. Ominaisuudet ja ilmentymämuuttujat
  3. Protokollat ja kategoriat
  4. Perintä ja metodien ylikirjoittaminen
← Takaisin: Objective-C iOS-kehitys vanhoille ja yrityssovelluksille