Rajoitteet (where) ja tyyppipäättely
Rajoittakaa geneeristä koodia where -rakenteella (esim. Equatable/Comparable- tai Element-rajoitteet) ja tutustukaa siihen, miten Swift päättelee geneeriset tyypit kutsukohdissa.
Rajoitteet (where) ja tyyppipäättely 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 rajoitteita?
Lisätkää rajoitteita, jotta geneerinen koodi voi käyttää tiettyjä operaatioita, kuten == tai <. Swiftin tyyppien päättely valitsee tällöin konkreettiset tyypit kutsuissa.
Equatable-rajoite
where T: Equatable sallii yhtäsuuruusvertailut. Ilman sitä == ei ole käytettävissä mille tahansa T:lle.
// Find the first index of value in an array of T
func indexOf<T>(_ value: T, in array: [T]) -> Int? where T: Equatable {
for (i, x) in array.enumerated() {
if x == value { return i } // allowed because T: Equatable
}
return nil
}
print(indexOf(3, in: [1,2,3,2]) ?? -1) // 2
print(indexOf("b", in: ["a","b","c"]) ?? -1) // 1Comparable-rajoite
T: Comparable -rajoitteen käyttö mahdollistaa järjestysoperaatiot, kuten <.
// Return the minimum value of a collection when elements are Comparable
func minimum<T: Comparable>(_ xs: [T]) -> T? {
guard var best = xs.first else { return nil }
for x in xs.dropFirst() {
if x < best { best = x }
}
return best
}
print(minimum([7,3,9]) ?? -1) // 3
print(minimum(["b","a","c"]) ?? "?") // "a"where-lauseella tehtävä laajennus
Käyttäkää where Element: ... -ehtoa lisätäksenne rajapintoja vain tietyille alkiotyypeille, tässä tapauksessa Equatable-tyyppisille taulukoille.
// Add a helper only when the array's Element is Equatable
extension Array where Element: Equatable {
func removingDuplicates() -> [Element] {
var seen: [Element] = []
for x in self {
if !seen.contains(x) { seen.append(x) }
}
return seen
}
}
print([1,2,2,3].removingDuplicates()) // [1,2,3]Useita rajoitteita
Yhdistäkää rajoitteita: rajoittakaa geneeristä tyyppiä ja sen assosioituja tyyppejä (esimerkiksi S.Element: Equatable).
// Require both Sequence and Equatable elements; force same-type relationship
func allEqual<S>(_ s: S) -> Bool
where S: Sequence, S.Element: Equatable {
var it = s.makeIterator()
guard let first = it.next() else { return true }
while let v = it.next() { if v != first { return false } }
return true
}
print(allEqual([2,2,2])) // true
print(allEqual([1,2,1])) // falsePäättely käytännössä
Swift päättelee geneeriset parametrit argumenteista ja asiayhteydestä, joten <T> tarvitsee harvoin määrittää kutsuissa erikseen.
// Inference: compiler deduces concrete types
let i = indexOf(10, in: [5,10,15]) // T is Int
let j = minimum(["z","x"]) // T is String
print(i ?? -1, j ?? "")where-lauseen merkitys
Pikatarkistus: Mitä where-lause tekee?
Kertaus
Kertaus: Rajoittakaa geneerisiä tyyppejä where-lauseella (esimerkiksi T: Equatable tai Element: Comparable) ja luottakaa Swiftin tyyppien päättelyyn konkreettisten tyyppien valitsemiseksi kutsuissa.
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 ”Rajoitteet (where) ja tyyppipäättely” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Rajoitteet (where) ja tyyppipäättely”. 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 ”Rajoitteet (where) ja tyyppipäättely”?
Rajoittakaa geneeristä koodia where -rakenteella (esim. Equatable/Comparable- tai Element-rajoitteet) ja tutustukaa siihen, miten Swift päättelee geneeriset tyypit kutsukohdissa. 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 ”Rajoitteet (where) ja tyyppipäättely”-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
- Geneeriset funktiot ja tyypit
- Rajoitteet (where) ja tyyppipäättely
- Geneeriset algoritmit kokoelmille