Swift Academy · Oppitunti

Tila-automaattien mallintaminen enumeraatioilla

Sovelluksen tilasiirtymien turvallinen esittäminen Swift-enumeraatioilla.

Oppitunti 4/412 vaihetta

Tila-automaattien mallintaminen enumeraatioilla 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

Enumeraatiot sopivat erinomaisesti äärellisten tilakoneiden mallintamiseen. Kukin tapaus on tila; siirtymät ovat seuraavan tilan palauttavia funktioita. Tämän lähestymistavan ansiosta virheellisten tilojen esittäminen on mahdotonta.

Yksinkertainen tilaenumeraatio

```swift enum TrafficLight { case red, yellow, green func next() -> TrafficLight { switch self { case .red: return .green case .green: return .yellow case .yellow: return .red } } } var light = TrafficLight.red light = light.next() // .green ```

Tilat liitetyillä tiedoilla

```swift enum LoadState { case idle case loading(progress: Double) case loaded(T) case failed(Error) } var state: LoadState<[String]> = .idle state = .loading(progress: 0.5) state = .loaded(["alice","bob"]) ```

Siirtymäfunktio

```swift func transition(_ state: LoadState, event: AppEvent) -> LoadState { switch (state, event) { case (.idle, .startFetch): return .loading(progress: 0) case (.loading, .progress(let p)): return .loading(progress: p) case (.loading, .success(let d)): return .loaded(d) case (.loading, .error(let e)): return .failed(e) default: return state } } ```

Miksi enumeraatioihin perustuvia tilakoneita?

Hyödyt: • Kattava switch — kääntäjä pakottaa käsittelemään kaikki tilat • Virheelliset yhdistelmät ovat mahdottomia (esimerkiksi `loaded` ilman tietoja) • Tila on arvo — sitä on helppo testata, kopioida ja kirjata lokiin • UI voi tehdä switchin tilan perusteella ja piirtää näkymän sen mukaan

Käyttöliittymän piirtäminen tilan perusteella

```swift func render(_ state: LoadState<[User]>) { switch state { case .idle: showEmptyView() case .loading(let p): showProgress(p) case .loaded(let users): showList(users) case .failed(let err): showError(err) } } ```

Soittimen tilakone

```swift enum PlayerState { case stopped case playing(track: String, position: TimeInterval) case paused(track: String, position: TimeInterval) } ``` Vain `playing`- ja `paused`-tapaukset sisältävät raidan — `stopped` ei sisällä, mikä tekee mallista itsensä dokumentoivan.

Virheellisten siirtymien estäminen

```swift extension PlayerState { mutating func play(track: String) { guard case .stopped = self else { return } self = .playing(track: track, position: 0) } mutating func pause() { if case .playing(let t, let p) = self { self = .paused(track: t, position: p) } } } ```

Tilakoneiden testaaminen

```swift func testLight() { var l = TrafficLight.red assert(l.next() == .green) assert(l.next().next() == .yellow) } ``` Tilakoneet, joiden siirtymäfunktiot ovat puhtaita, on helppo testata yksikkötesteillä — mockeja ei tarvita.

Tilakoneiden yhdistäminen

Suurissa sovelluksissa useat tilakoneet toimivat usein yhdessä: ```swift struct AppState { var auth: AuthState var data: LoadState<[Article]> var ui: UIState } ``` Niitä kannattaa yhdistää yhteen juuritilan rakenteeseen Flux/Redux-tyylisiä arkkitehtuureja varten.

Pikatesti

Mikä tekee enumeraatioihin perustuvista tilakoneista kääntäjän kannalta turvallisia?

Kertaus

Tärkeimmät asiat: • Kukin tapaus = tila; siirtymät = seuraavan tilan palauttavia funktioita • Liitetyt arvot sisältävät tilakohtaiset tiedot • Kattava switch = kääntäjän pakottama tilojen käsittely • Puhtaita siirtymäfunktioita on helppo testata yksikkötesteillä • Yhdistä useita tilakoneita juuritilan rakenteeseen Kurssi on valmis! Seuraavaksi: protokollien yhdistäminen.
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 ”Tila-automaattien mallintaminen enumeraatioilla” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Tila-automaattien mallintaminen enumeraatioilla”. 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 ”Tila-automaattien mallintaminen enumeraatioilla”?

Sovelluksen tilasiirtymien turvallinen esittäminen Swift-enumeraatioilla. 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 ”Tila-automaattien mallintaminen enumeraatioilla”-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. Raakarvot ja CaseIterable
  2. Liitetyt arvot monipuoliseen dataan
  3. Indirect-enumeraatiot ja rekursiiviset rakenteet
  4. Tila-automaattien mallintaminen enumeraatioilla
← Takaisin: Swift Academy