Optionaalit
Optionaalit
Optionaalit on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/1. 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ä 1 oppituntia.
Johdanto
Hei,
Käytetään ilmaisemaan, että optionaalisella muuttujalla ei välttämättä ole arvoa.
Jos optionaalisella tyypillä määritellyllä muuttujalla on arvo, optionaali puretaan ja arvoa käytetään. Muussa tapauksessa arvoa ei ole.
Optionaalien käyttö Swiftissä monien tyyppien kanssa
Sitä voidaan verrata Obj-C:n nil-osoittimeen. Nil-osoitin on kuitenkin käytettävissä vain objektityypeille.
Swiftin optionaaleja käytetään objektityyppien lisäksi myös Struct-, enum- ja perustyypeille.
var optionalVar: String?
// optionalVar is automatically set to nil]
/*
Since we define it as optional without
assigning a value, the variable
automatically takes the value of nil.
*/Swiftin nil ja Obj-C:n nil eivät ole sama asia
Swiftin nil ja Obj-C:n nil eivät ole sama asia.
Obj-C:n nil-osoitin ilmaisee objektin puuttumisen. Se ei ole Swiftin nil-osoitin. Swiftin nil ilmaisee datan puuttumisen, ja sitä voidaan käyttää muidenkin kuin objektityyppien kanssa.
Pakotettu purkaminen
Optionaaleiksi määritellyt muuttujat voidaan avata force unwrap -menetelmällä.
Huutomerkkioperaattorilla optionaali voidaan pakottaa purettavaksi, mutta sen käyttö ei yleensä ole suositeltavaa.
Jos viitattua arvoa ei ole saatavilla force unwrap -toiminnon aikana, syntyy suorituksenaikainen virhe.
let convertedNumber : Int? = 123
if convertedNumber != nil {
print("convertedNumber has an integer value of \(convertedNumber!).")
}
// Prints "convertedNumber has an integer value of 123."Optionaalin käsittely optionaalisidonnan avulla
if let-lohkolla voimme käyttää optionaalisen muuttujan arvoa sijoittamalla sen vakioon tai muuttujaan.
Tämä on elegantimpi tapa kuin force unwrapin käyttö.
var possibleNumber : String? = "10"
if let actualNumber = possibleNumber {
print(actualNumber)
}Esimerkki
if let firstNumber = Int("4"), let secondNumber = Int("42"),
firstNumber < secondNumber && secondNumber < 100 {
print("\(firstNumber) < \(secondNumber) < 100")
}
// Prints "4 < 42 < 100"
/*
If at least one of them is false,
it will not be entered in the if blog.
*/
Implisiittisesti purettavat optionaalit
Joissakin tapauksissa optionaalille annetaan arvo ensimmäisessä vaiheessa, ja seuraavissa vaiheissa tiedetään varmasti, ettei se ole nil.
Tällöin optionaalin (?) sijaan käytetään (!) -operaattoria, jolla ilmaistaan, ettei tämä optio ole varmasti nil.
Tätä määrittelytapaa kutsutaan nimellä ”implisiittisesti purettavat optionaalit”.
Implisiittisesti purettavat optionaalit
Yleisin käyttökohde on luokan alustamisvaihe.
Toisin kuin tavallisia optionaaleja, implisiittisesti purettaviksi määriteltyjä muuttujia ei tarvitse purkaa erikseen.
let possibleString: String? = "An optional string."
// requires an exclamation mark
let forcedString: String = possibleString!
let assumedString: String! = "An implicitly unwrapped optional string."
// no need for an exclamation mark
let implicitString: String = assumedString Esimerkki
Jos tämän tyyppisille muuttujille annetaan arvoksi nil, syntyy suorituksenaikaisia virheitä.
Otetaan esimerkki
/*
We can use it during optional binding or we can check for nil.
So we use implicitly unwrapped optional
in the same way we use classic optional.
*/
var assumedString: String! = nil
if let definiteString = assumedString {
print(definiteString)
}
// Prints "An implicitly unwrapped optional string."Varoitus
Jos muuttuja voi olla nil, implisiittisesti purettavaa optionaalia ei pidä käyttää.
Nil-yhdistämisoperaattori
Se helpottaa optional-tyyppien purkamista.
Katsotaan esimerkki.
let defaultColorName = "red"
// defaults to nil
var userDefinedColorName: String?
var colorNameToUse = userDefinedColorName ?? defaultColorName
/*
userDefinedColorName is nil,
so colorNameToUse is set to the default of "red"
*/
// a != nil ? a! : b
/*
We can think of it as a shortcut to the above expression.
A checks if a is nil, if a is not nil, it unwrap and eturn,
otherwise it returns the default value, ie b.
*/
Onnittelut
Onnittelut 🎉
Optional-käsite on yksi Swiftin tärkeimmistä ominaisuuksista. Optional-arvojen avulla pääsemme eroon nil-tarkistuksista, kirjoitamme koodimme tyylikkäämmin ja teemme sovelluksistamme turvallisempia.
Nähdään seuraavassa oppitunnissa 🥳

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 ”Optionaalit” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Optionaalit”. 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ä 1 oppituntia.
Mitä opin oppitunnilla ”Optionaalit”?
Optionaalit 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 1/1.
Kuinka kauan ”Optionaalit”-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.