Tyyppien tarkistaminen is-operaattorilla
Tarkista ilmentymän tyyppi ennen tyypinmuunnosta.
Tyyppien tarkistaminen is-operaattorilla 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.
is-operaattori
Tyyppitarkistusoperaattori is palauttaa Bool-arvon, joka kertoo, onko instanssi tiettyä tyyppiä tai sen alityyppiä. Se ei tee muunnosta, vaan ainoastaan testaa tyypin.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let a: Animal = Dog(name: "Rex")
print(a is Dog)
print(a is Cat)Alityyppiin kuulumisen testaaminen
is on tosi, kun instanssi on täsmälleen kyseistä tyyppiä tai mitä tahansa sen aliluokkaa. Dog on Animal.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let a: Animal = Dog(name: "Rex")
print(a is Animal)
print(a is Dog)is-operaattorin käyttäminen ehdoissa
Voitte haarauttaa ohjelman kulkua tyyppitarkistuksen perusteella if-rakenteella ja valita toiminnan ajonaikaisen tyypin mukaan.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let a: Animal = Cat(name: "Mia")
if a is Cat {
print("It is a cat")
} else {
print("Not a cat")
}Kokoelman tyyppien laskeminen
is-operaattoria voi hyödyntää esimerkiksi laskemalla, kuinka moni alkio vastaa tiettyä tyyppiä sisältävässä eri tyyppien taulukossa.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let zoo: [Animal] = [Dog(name: "Rex"), Cat(name: "Mia"), Dog(name: "Buddy")]
let dogCount = zoo.filter { $0 is Dog }.count
print("Dogs:", dogCount)is protokollien kanssa
is tarkistaa myös, noudattaako instanssi tiettyä protokollaa, ja palauttaa true, jos se noudattaa sitä.
protocol Flyer {}
class Bird: Flyer {}
class Fish {}
let creatures: [Any] = [Bird(), Fish()]
for c in creatures { print(c is Flyer) }is vai as?
is vastaa vain kyllä tai ei. as? menee pidemmälle ja antaa arvon käyttöönne, jos tarvitsette aliluokan jäseniä.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let a: Animal = Dog(name: "Rex")
print("Check only:", a is Dog)
if let d = a as? Dog { print("Use it:", d.bark()) }Tarkistaminen is-operaattorilla
Käyttäkää is-operaattoria guard-rakenteessa, jotta voitte poistua heti, jos instanssi ei ole odotettua tyyppiä.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
func onlyForCats(_ a: Animal) {
guard a is Cat else {
print("Skipping non-cat")
return
}
print("Processing a cat")
}
onlyForCats(Cat(name: "Mia"))
onlyForCats(Dog(name: "Rex"))is-operaattorin yhdistäminen switch-rakenteeseen
Voitte käsitellä tyyppitarkistuksia epäsuorasti switch-rakenteella, mutta useita tyyppejä käsiteltäessä case is -kuviovertailu on selkeä tapa.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let items: [Any] = [Dog(name: "Rex"), 42, "hello"]
for item in items {
switch item {
case is Dog: print("a dog")
case is Int: print("an integer")
default: print("something else")
}
}is tarkistaa ajonaikaisen tyypin
is tutkii todellisen ajonaikaisen tyypin, ei muuttujalle ilmoitettua tyyppiä. Animal-tyyppinen muuttuja, joka sisältää Dog-olion, läpäisee tarkistuksen is Dog.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let declaredAsAnimal: Animal = Dog(name: "Rex")
print("Runtime is Dog:", declaredAsAnimal is Dog)Tarkistaminen ennen pakotettua tyyppimuunnosta
Turvallinen toimintatapa on tarkistaa tyyppi is-operaattorilla ja käyttää vasta sen jälkeen as!-operaattoria, koska tyyppi on tällöin varmistettu.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let a: Animal = Dog(name: "Rex")
if a is Dog {
let d = a as! Dog
print(d.bark())
}Tyyppitarkistuksen yhteenvetoesimerkki
Yhdessä tarkistamiseen käytettävä is ja tyyppimuunnokseen käytettävä as? muodostavat kattavan ja turvallisen työkalupakin ajonaikaisten tyyppien käsittelyyn.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let zoo: [Animal] = [Dog(name: "Rex"), Cat(name: "Mia")]
for a in zoo {
if a is Dog { print("dog:", a.name) }
if a is Cat { print("cat:", a.name) }
}Pikatarkistus
Palauttakaa mieleenne, mitä is-operaattori palauttaa.
Kertaus: tyyppien tarkistaminen is-operaattorilla
Opitte, että is palauttaa Bool-arvon, jolla voidaan tarkistaa kuuluminen ajonaikaiseen tyyppiin, myös aliluokat ja protokollan noudattaminen mukaan lukien, että se sopii hyvin yhteen suodatuksen ja switch case is -rakenteen kanssa ja että is-tarkistus ennen as!-operaattoria tekee pakotetusta tyyppimuunnoksesta turvallisen.
class Animal {
let name: String
init(name: String) { self.name = name }
}
class Dog: Animal {
func bark() -> String { return name + " says Woof" }
}
class Cat: Animal {
func meow() -> String { return name + " says Meow" }
}
let zoo: [Animal] = [Dog(name: "Rex"), Cat(name: "Mia"), Dog(name: "Buddy")]
print("Cats:", zoo.filter { $0 is Cat }.count)
print("Dogs:", zoo.filter { $0 is Dog }.count)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 ”Tyyppien tarkistaminen is-operaattorilla” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Tyyppien tarkistaminen is-operaattorilla”. 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 ”Tyyppien tarkistaminen is-operaattorilla”?
Tarkista ilmentymän tyyppi ennen tyypinmuunnosta. 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 ”Tyyppien tarkistaminen is-operaattorilla”-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
- Ylä- ja alityypityksen perusteet
- Ehdollinen tyypinmuunnos as?-operaattorilla
- Pakotettu tyypinmuunnos as!-operaattorilla ja sen riskit
- Tyyppien tarkistaminen is-operaattorilla