Swift Academy · Oppitunti

Protokollalähtöisen suunnittelun periaatteet

Protokollien yhdistämisen suosiminen luokkaperinnän sijaan joustavan suunnittelun saavuttamiseksi.

Oppitunti 4/412 vaihetta

Protokollalähtöisen suunnittelun periaatteet on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Tervetuloa

Protokollalähtöinen ohjelmointi (POP) suosii protokollien koostamista luokkaperinnän sijaan, jotta Swift-koodista tulee joustavaa, testattavaa ja uudelleenkäytettävää.

Perinnän ongelma

Syvät luokkahierarkiat aiheuttavat ongelmia: • Aliluokat perivät kaiken yliluokan tilan ja toiminnan • Yliluokan muuttaminen voi rikkoa aliluokat • Kahdesta luokasta ei voi periä Protokollat ratkaisevat kaikki nämä kolme ongelmaa.

Aloittaminen protokollasta

```swift protocol Greetable { var greeting: String { get } func greet() } extension Greetable { func greet() { print(greeting) } // default implementation } ``` Protokollalaajennukset tarjoavat oletustoteutuksia, jotka jokainen protokollan mukainen tyyppi saa automaattisesti.

Toimintojen koostaminen

```swift protocol Persistable { func save() } protocol Networked { func fetch() async throws -> Data } protocol Loggable { func log(_ msg: String) } struct DataService: Persistable, Networked, Loggable { ... } ``` Yhdistelkää toimintoja LEGO-palikoiden tavoin — luokkahierarkiaa ei tarvita.

Protokollalaajennukset ja jaettu logiikka

```swift extension Loggable { func log(_ msg: String) { print("[\(type(of: self))] \(msg)") } } // Every Loggable type gets this for free ```

Jälkikäteinen mallinnus

Protokollia voi soveltaa tyyppeihin, joita ette itse omista: ```swift protocol JSONConvertible { func toJSON() -> String } extension Int: JSONConvertible { func toJSON() -> String { "\(self)" } } ``` Voitte lisätä vakiokirjaston tyypeille mukaisuuksia ilman aliluokkien luomista.

Arvotyypit ja protokollat

Protokollien mukaiset rakenteet tarjoavat sekä arvosemantiikan että polymorfismin: ```swift protocol Shape { var area: Double { get } } struct Circle: Shape { var radius: Double; var area: Double { .pi * radius * radius } } struct Square: Shape { var side: Double; var area: Double { side * side } } let shapes: [any Shape] = [Circle(radius:3), Square(side:4)] shapes.map { $0.area } // [28.27, 16] ```

Riippuvuuksien injektointi protokollan avulla

```swift protocol DataStore { func save(_ data: Data) } struct FileStore: DataStore { func save(_ d: Data) { /* disk */ } } struct MockStore: DataStore { func save(_ d: Data) { /* test log */ } } class Service { let store: DataStore init(store: DataStore) { self.store = store } } ```

Milloin luokkia kannattaa käyttää

Suosikaa luokkia, kun: • Tarvitaan jaettua muokattavaa tilaa (viitesemantiikka) • Tarvitaan yhteensopivuutta ObjC/UIKit-rajapintojen kanssa • Perintä on oikea malli (harvoin) Käyttäkää oletusarvoisesti protokollia ja rakenteita kaikessa muussa.

Protokollien nimeämiskäytännöt

• Kyvykkyysprotokollat: pääte `-able`, `-ible` tai `-ing` (Equatable, Hashable, Coding) • Delegointiprotokollat: pääte `Delegate` tai `DataSource` • Abstrakti rooli: substantiivi (`Store`, `Parser`, `Renderer`) Hyvät nimet tekevät protokollalähtöisestä koodista itsensä dokumentoivaa.

Pikatarkistus

Mitä protokollalaajennukset tarjoavat protokollan mukaisille tyypeille?

Kertaus

Keskeiset opit: • Suosikaa protokollia ja rakenteita luokkahierarkioiden sijaan • Protokollalaajennukset tarjoavat jaettuja oletustoteutuksia • Koostakaa toiminnot pienistä yhden vastuualueen protokollista • Protokollat mahdollistavat riippuvuuksien injektoinnin testattavuuden vuoksi • Käyttäkää luokkia viitesemantiikkaa ja ObjC-yhteentoimivuutta varten Kurssi on suoritettu! Seuraavaksi: arvotyypit ja viitetyypit perusteellisesti.
Aloita maksutta

Opi Swift 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
122
Oppitunnit
409

Usein kysytyt kysymykset

Onko oppitunti ”Protokollalähtöisen suunnittelun periaatteet” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Protokollalähtöisen suunnittelun periaatteet”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Protokollalähtöisen suunnittelun periaatteet”?

Protokollien yhdistämisen suosiminen luokkaperinnän sijaan joustavan suunnittelun saavuttamiseksi. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Protokollalähtöisen suunnittelun periaatteet”-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ä Swift Academy-oppitunnilla?

Kyllä. Jokainen Swift Academy-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. Protokollien yhdistäminen &-operaattorilla
  2. Ehdollinen protokollanoudattaminen
  3. Self-vaatimukset ja Equatable-suunnittelu
  4. Protokollalähtöisen suunnittelun periaatteet
← Takaisin: Swift Academy