Tyypin häivytyksen mallit (AnySequence/AnyIterator)
Käyttäkää AnySequence - ja AnyIterator -tyyppejä konkreettisten sekvenssi- ja iteraattorityyppien häivyttämiseen, jotta API:t voivat palauttaa ”T-alkioiden sekvenssin” paljastamatta toteutusta.
Tyypin häivytyksen mallit (AnySequence/AnyIterator) on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/3. 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ä 3 oppituntia.
Miksi tyypin häivytystä?
Tyypin häivytys piilottaa konkreettiset tyypit vakaan kääreen taakse. AnySequence- ja AnyIterator-tyyppien avulla voitte palauttaa ”alkioiden sekvenssin” paljastamatta sisäistä rakennetta.
Rajoitus
Sequence-protokollalla on assosioitu tyyppi (Element), joten protokollaa sellaisenaan ei voi käyttää konkreettisena arvotyyppinä. Tarvitsemme kääreen.
// Goal: return "some Sequence<Int>"
// This won't compile as a stored value type:
// let s: Sequence = [1,2,3] // Protocol with associated types
// Instead, erase the type to AnySequence<Int>.AnySequence-kääre
AnySequence käärii minkä tahansa konkreettisen sekvenssin (Array, Set tai mukautetun sekvenssin) ja tarjoaa yhdenmukaisen tyypin, kuten AnySequence<Int>.
// Build an AnySequence<Int> from an Array
let a = [1, 2, 3]
let seq1: AnySequence<Int> = AnySequence(a)
// Consume like any sequence
for x in seq1 { print(x, terminator: " ") }
print("")AnyIterator-kääre
AnyIterator käärii alkioita tuottavan sulkeuman. Käärikää se AnySequence-tyypin sisään, jotta voitte tarjota kokonaisen sekvenssin.
// Create an AnyIterator<Int> by hand
var i = 0
let it = AnyIterator<Int> {
// Return next number or nil to stop
guard i < 3 else { return nil }
defer { i += 1 }
return i
}
let seq2 = AnySequence(it)
for x in seq2 { print(x, terminator: " ") } // 0 1 2
print("")Yhtenäinen palautustyyppi
Tyypin häivytyksen avulla yksi funktio voi palauttaa erilaisia toteutuksia yhden vakaan palautustyypin (AnySequence<Int>) kautta.
// Return a sequence of Int without exposing concrete type
func numbers(flag: Bool) -> AnySequence<Int> {
if flag {
// Array-based
return AnySequence([10, 20, 30])
} else {
// Lazy generated with AnyIterator
var n = 1
let it = AnyIterator<Int> {
guard n <= 3 else { return nil }
defer { n += 1 }
return n * 100
}
return AnySequence(it)
}
}
for x in numbers(flag: true) { print(x, terminator: " ") } // 10 20 30
print("")
for x in numbers(flag: false) { print(x, terminator: " ") } // 100 200 300
print("")Milloin sitä käytetään
Käyttäkää type erasurea, kun:
- Haluatte piilottaa sekvenssien ja iteraattorien toteutustiedot.
- Rajapintojen on palautettava sama tyyppi sisäisistä haaroista riippumatta.
- Geneeriset tyypit paljastuvat liikaa rajapinnoilla.
Huomioita: suosikaa moduulien sisällä suorituskyvyn ja selkeyden vuoksi geneerisiä tyyppejä; käyttäkää rajapinnoilla tarvittaessa AnySequence/AnyIterator-tyyppejä.
AnySequencen tarkoitus
Pikatarkistus: Mitä hyötyä AnySequence<T> tarjoaa?
Kertaus
Kertaus: Kääri konkreettiset sekvenssit ja iteraattorit AnySequence- ja AnyIterator-tyypeillä häivyttääksesi tyypit ja palauttaaksesi joustavista rajapinnoista “T:n sekvenssin”.
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 ”Tyypin häivytyksen mallit (AnySequence/AnyIterator)” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Tyypin häivytyksen mallit (AnySequence/AnyIterator)”. 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ä 3 oppituntia.
Mitä opin oppitunnilla ”Tyypin häivytyksen mallit (AnySequence/AnyIterator)”?
Käyttäkää AnySequence - ja AnyIterator -tyyppejä konkreettisten sekvenssi- ja iteraattorityyppien häivyttämiseen, jotta API:t voivat palauttaa ”T-alkioiden sekvenssin” paljastamatta toteutusta. 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 2/3.
Kuinka kauan ”Tyypin häivytyksen mallit (AnySequence/AnyIterator)”-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
- associatedtype ja geneeriset protokollat
- Tyypin häivytyksen mallit (AnySequence/AnyIterator)
- Milloin käyttää existentials-tyyppejä (any P) ja milloin generiikkaa