Swift Academy · Oppitunti

Sulkeumien sieppauslistat ja [weak self]

Sieppauslistojen käyttäminen, jotta sulkeumat eivät säilytä olioita vahvoilla viitteillä.

Oppitunti 4/412 vaihetta

Sulkeumien sieppauslistat ja [weak self] 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

Sulkeumat kaappaavat muuttujia ympäröivästä näkyvyysalueestaan. Kaappauslistoilla (`[weak self]`, `[unowned self]`, `[value]`) hallitaan tarkasti, miten kaappaukset tehdään.

Oletusarvoinen vahva kaappaus

```swift var name = "Alice" let greet = { print("Hello, \(name)") } name = "Bob" greet() // "Hello, Bob" — closure sees current value ``` Oletuksena sulkeumat kaappaavat muuttujien *viittaukset*.

Kaappauslistojen perusteet

```swift var count = 10 let snapshot = { [count] in print(count) } // captures value count = 99 snapshot() // 10 — snapshot of count at capture time ``` Arvotyypin ilmoittaminen `[]`-listassa kopioi arvon sillä hetkellä, kun sulkeuma luodaan.

[weak self] -malli

```swift class API { func fetch(completion: @escaping () -> Void) { ... } } class VC { func load() { api.fetch { [weak self] in guard let self else { return } // self might be nil by now self.updateUI() } } } ```

guard let self ja pidennetty elinaika

Swift 5.3+: sitokaa `self` uudelleen guard-rakenteessa ilman varjostusta: ```swift { [weak self] in guard let self else { return } // 'self' is now strong within this block doA() doB() doC() } ```

[unowned self] – milloin se on turvallinen

```swift button.addTarget(self, action: #selector(tap), for: .touchUpInside) // If the button's closure is guaranteed not to outlive self: let action: () -> Void = { [unowned self] in self.handleTap() } ```

Useiden arvojen kaappaaminen

```swift let base = 100 let multiplier = 2 let compute = { [base, multiplier] in base * multiplier } print(compute()) // 200 ``` Kaapatkaa useita arvoja samaan listaan pilkuilla eroteltuina.

Kaappauslista nimetyillä sidoksilla

```swift let myService = service // rename in capture list: let handler = { [service = myService] in service.process() } ``` Tästä on hyötyä, kun haluatte kaapata tietyn tilannekuvan uudella nimellä.

Escaping- ja non-escaping-sulkeumat

• `@escaping`-sulkeuma voidaan tallentaa ja kutsua funktion palautumisen jälkeen → syklien riski • Non-escaping-sulkeuma kutsutaan ennen funktion palautumista → ei syklien riskiä ```swift func apply(_ f: () -> Void) { f() } // non-escaping, no [weak] needed func later(_ f: @escaping () -> Void) { queue.async { f() } } // escaping ```

Kaappausongelmien vianmääritys

Jos epäilette sykliä: 1. Lisätkää luokkaan `deinit { print("deallocated") }` 2. Siirtykää pois näkymästä tai asettakaa instanssin arvoksi nil 3. Jos deinit ei tulosta mitään → sykli on olemassa Lisätkää sitten `[weak self]` kyseisen luokan sulkeumiin.

Pikatarkistus

Mitä `[weak self]` tekee kaappauslistassa?

Kertaus

Keskeiset opit: • Sulkeumat kaappaavat oletusarvoisesti viittauksia • Kaappauslista `[value]` kopioi arvotyypit luontihetkellä • `[weak self]` — ei säilytä oliota, muuttuu automaattisesti nil-arvoksi, käyttäkää `guard let self` -rakennetta • `[unowned self]` — ei säilytä oliota, ei ole nil-turvallinen • `@escaping`-sulkeumat tarvitsevat kaappauslistoja; non-escaping-sulkeumat eivät yleensä tarvitse niitä Kurssi on suoritettu! Seuraavaksi: funktionaalinen ohjelmointi Swiftissä.
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 ”Sulkeumien sieppauslistat ja [weak self]” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Sulkeumien sieppauslistat ja [weak self]”. 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 ”Sulkeumien sieppauslistat ja [weak self]”?

Sieppauslistojen käyttäminen, jotta sulkeumat eivät säilytä olioita vahvoilla viitteillä. 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 ”Sulkeumien sieppauslistat ja [weak self]”-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. Miten ARC laskee viitteet
  2. Viitesyklit: syyt ja havaitseminen
  3. weak- ja unowned-viitteet
  4. Sulkeumien sieppauslistat ja [weak self]
← Takaisin: Swift Academy