Swiftissä ominaisuuksia käytetään kuvaamaan objektin ominaisuuksia, ja ne voivat olla vakioita tai muuttujia luokissa, rakenteissa tai luetteloissa.
Swiftissä ominaisuuksia käytetään luokkien, rakenteiden tai luettelujen arvojen tallentamiseen, ja ominaisuuksilla on getter- ja setter-metodit ominaisuuksien arvojen muuttamiseksi tai asettamiseksi vaatimustemme mukaan.
- Swift määrittelee ominaisuuden
- Ominaisuuksien nopea määrittäminen ja käyttäminen
- Swiftin tallennetut ominaisuudet
- Tallennetut ominaisuudet vakioituihin rakenneinstansseihin
- Swift Lazy Stored Properties
- Swiftin laskennalliset ominaisuudet
- Swift Read-Only Computed Properties
- Swift Property Observer
- Swift-tyypin omaisuus
- Swift-tyypin ominaisuuksien kysely ja asettaminen
Swift määrittelee ominaisuuden
Seuraavana on yksinkertainen esimerkki luokan luomisesta ominaisuuksineen swift-ohjelmointikielellä.
class UserDetails {
var firstName: String = ””
var lastName:
}
Yllä olevassa esimerkissä määrittelimme luokan ”UserDetails”, jolla on kaksi ominaisuutta (firstName, lastName).
Ominaisuuksien nopea määrittäminen ja käyttäminen
Seuraavassa on esimerkki luokassa määriteltyjen ominaisuuksien julistamisesta ja arvojen antamisesta niille.
class UserDetails {
var firstName: String = ””
var lastName: String = ””
}
var uinfo = UserDetails()
uinfo.firstName = ”Suresh”
uinfo.lastName = ”Dasari”
print(”Nimi: \( uinfo.firstName) \(uinfo.lastName)”)
Ylläolevassa esimerkissä määrittelimme kaksi ominaisuutta ”firstName”, ”lastName” ja nämä arvot liittyvät luokkaan ”UserDetails”. Sen jälkeen loimme instanssin kyseiselle luokalle ja käytimme luokan sisällä olevia ominaisuuksia määrittääksemme arvot vaatimustemme perusteella.
Kun suoritamme yllä olevan ohjelman swift-leikkikentällä, saamme alla olevan kaltaisen tuloksen
Samalla tavalla voimme määritellä ja käyttää rakenteiden ja luetteloiden ominaisuuksia vaatimustemme perusteella swift-ohjelmointikielessä.
Swift-ohjelmointikielessä meillä on käytettävissä erityyppisiä ominaisuuksia, jotka ovat
- Tallennetut ominaisuudet
- Laskennalliset ominaisuudet
Swiftin tallennetut ominaisuudet
Swiftissä tallennettu ominaisuus on vakio tai muuttuja ja se tallennetaan tietyn luokan tai rakenteen instanssin osaksi. Tallennettua ominaisuutta voidaan käyttää muuttujan tallentamiseen var
-avainsanalla ja vakion tallentamiseen let
-avainsanalla.
Voidaan antaa oletusarvot tallennetuille ominaisuuksille osana niiden määrittelyä ja voidaan muuttaa tallennettujen ominaisuuksien alkuarvoja niiden alustuksen aikana.
Katsomme nyt esimerkin avulla, miten tallennettuja ominaisuuksia voidaan määritellä luokissa ja miten tallennettujen ominaisuuksien alkuarvoja voidaan muuttaa sen alustuksen aikana.
Seuraavana on esimerkki tallennettujen ominaisuuksien määrittelystä osana luokkaa tai rakennetta swift-ohjelmointikielessä.
struktuuri UserDetails {
var firstName: String = ”Rohini”
let lastName: String
}
var uinfo = UserDetails(firstName: ”Suresh”, lastName: ” Dasari”)
print(”Nimi: \( uinfo.firstName) \(uinfo.lastName)”)
Ylläolevassa esimerkissä määrittelimme kaksi tallennettua ominaisuutta (firstName, lastName), joista toinen on muuttuja (var
) ja toinen vakio (let
), jolla on alkuarvot. Tämän jälkeen loimme rakenteen instanssin ja muutimme alkuarvoja sen alustuksen aikana.
Kun suoritamme yllä olevan ohjelman swift-leikkikentällä, saamme alla olevan kaltaisen tuloksen
Näin voimme määritellä tallennettuja ominaisuuksia luokkiin, rakenteisiin ja luetteluihin vaatimustemme mukaan swift-ohjelmointikielessä.
Tallennetut ominaisuudet vakioituihin rakenneinstansseihin
Swiftissä voimme määritellä luokan tai rakenteen, jossa on tallennettuja ominaisuuksia vakiona. Jos määrittelemme vakio-ominaisuuden alkuarvolla, meidän ei ole mahdollista muuttaa tuota arvoa, koska kun kerran vakiomuuttujaan määritetty arvo, jonka pitäisi olla sama koko sovelluksen ajan.
Jos yritämme muuttaa vakio-ominaisuuden arvoa sen alustuksen aikana tai luokan instanssin kanssa, kääntäjä heittää virheen.
Seuraava on esimerkki vakio-ominaisuuden tallennetun arvon muuttamisesta sen jälkeen, kun arvo on alustettu luokan instanssin luomisen aikana.
struktuuri UserDetails {
var firstName: String = ”Rohini”
let lastName: String
}
var uinfo = UserDetails(firstName: ”Suresh”, lastName: ” Dasari”)
uinfo.lastName = ”Alavala”
print(”Nimi: \( uinfo.firstName) \(uinfo.lastName)”)
Jos tarkkailet yllä olevaa esimerkkiä, määrittelimme vakio-ominaisuuden ”lastName” ja annoimme muuttujalle arvon luokan instanssin luomisen aikana. Sen jälkeen taas yritämme muuttaa vakiomuuttujan arvoa.
Kun yritämme ajaa yllä olevaa esimerkkiä swift playgroundissa, saamme alla olevan kaltaisen virheen
Error: cannot assign to property: ’lastName’ is a ’let’-vakio
Kun osoitamme vakio-ominaisuudelle arvon, jonka tulee olla sama koko sovelluksessa, muuten tulee virhe. Lisätietoja vakioista saat tästä Swift Constants.
Swift Lazy Stored Properties
Swiftissä laiska tallennettu ominaisuus on ominaisuus, jonka alkuarvo ladataan vasta, kun ominaisuuden arvoa käytetään ensimmäisen kerran. Swiftissä voimme määritellä lazy stored -ominaisuuden käyttämällä lazy
-avainsanaa ennen sen julistusta.
Swiftissä lazy stored -ominaisuudet ovat hyödyllisiä silloin, kun ominaisuuden alkuarvoa ei tarvitse ladata ennen kuin sitä käytetään sovelluksessa. Oletetaan, että meillä on yksi ominaisuus ja meidän täytyy suorittaa joitakin monimutkaisia operaatioita ladata tai alustaa arvo, mutta se on tarpeen vain tietyissä paikoissa siinä tapauksessa, jos käytämme laiska tallennettu ominaisuuksia nämä arvot ei ladata, kunnes käytämme sitä koodissamme.
Nyt näemme kuinka käyttää laiskoja tallennettuja ominaisuuksia swift-sovelluksissa esimerkkien avulla.
Seuraavana on esimerkki laiskan tallennetun ominaisuuden käyttämisestä swift-ohjelmointikielessä.
luokka Opiskelija {
var name: String
lazy var studentInfo: String = {
return ”Tervetuloa Tutlane, \(self.name)!”
}()
init(name: String) {
self.name = name
}
}
let stu = Student(name: ”Suresh”)
print(stu.studentInfo)
Jos havaitset yllä olevan esimerkin, määrittelimme laiskan tallennetun ominaisuuden ”studentInfo” käyttämällä lazy
avainsanaa. Tämä ominaisuuden arvo ei lataudu ennen kuin print-lause kutsuu ominaisuutta student-luokan instanssista.
Kun suoritamme yllä olevan ohjelman swift-leikkikentällä, saamme alla olevan kaltaisen tuloksen
Tällä tavalla voimme käyttää laiskoja tallennettuja ominaisuuksia swift-ohjelmointikielessä vaatimustemme perusteella.
Tässä meidän täytyy muistaa, että aina meidän täytyy ilmoittaa laiskat tallennetut ominaisuudet muuttujaksi (var), koska sen arvoa ei haeta, ennen kuin instanssin alustaminen valmistuu, mutta vakioille (let) ominaisuuksille on saatava arvo, ennen kuin alustaminen valmistuu, se on syy siihen, miksi meidän täytyy aina määritellä laiskat ominaisuudet muuttujiksi.
Swiftin laskennalliset ominaisuudet
Swiftissä toisin kuin tallennetut ominaisuudet, laskennalliset ominaisuudet eivät tallenna arvoa sen sijaan laskennalliset ominaisuudet tarjoavat getterin ja valinnaisen setterin muiden ominaisuuksien arvojen hakemiseen ja asettamiseen välillisesti. Voimme määritellä laskennallisia ominaisuuksia luokkiin, rakenteisiin ja luetteloihin vaatimustemme mukaan.
Seuraavassa on esimerkki laskennallisten ominaisuuksien määrittelystä käyttäen getteriä ja setteriä arvojen asettamiseen swift-ohjelmointikielellä.
class Circle {
var radius : Double?
var cval : Double?
var Area: Double {
get {
return radius! * säde!
}
set (newArea){
cval = Double(newArea) * 3.14
}
}
}
}
let result = Circle()
result.Area = 20
print(result.cval)
Jos tarkkailet yllä olevaa esimerkkiä, asetamme uuden arvon ominaisuudelle ”Area” käyttäen getter- ja setter-ominaisuuksia.
Kun suoritamme yllä olevan ohjelman swift-leikkikentällä, saamme alla olevan kaltaisen tuloksen
Tämä on, miten voimme käyttää laskennallisia ominaisuuksia swift-ohjelmointikielessä käyttääksemme arvoja ilman tallentamista vaatimuksiemme perusteella.
Swift Read-Only Computed Properties
Laskennallista ominaisuutta, jossa on pelkkä getter, mutta ei setteriä, kutsutaan Read-Only Computed Properties -ominaisuudeksi. Swiftissä voimme käyttää read-only computed property -ominaisuutta pisteen (.) syntaksin avulla ja se palauttaa aina arvon.
Seuraavassa on esimerkki read-only computed properties -ominaisuuksien käytöstä swift-ohjelmointikielessä.
class Multiplication {
var num1 : Int = 5
var num2 : Int = 5
var multiply: Int {
get {
return num1 * num2
}
}
}
let r = Multiplication()
print(r.multiply)
Yllä olevaan esimerkkiin määrittelimme kaksi ominaisuutta, joilla on oletusarvot luokassa ja kerromme nuo kaksi lukua getterillä. Sen jälkeen loimme luokalle instanssin ja käytimme getter-arvoa käyttäen pisteen (.) syntaksia.
Kun suoritamme yllä olevan ohjelman swift-leikkikentällä, saamme alla olevan kaltaisen tuloksen
Tämä on, miten voimme käyttää vain lukuarvoja sisältäviä laskennallisia ominaisuuksia arvojen asettamiseen getter-ominaisuuden avulla swift-ohjelmointikielessä.
Swift Property Observer
Swiftissä ominaisuuksien tarkkailijoita käytetään tarkkailemaan ja reagoimaan ominaisuuden arvon muutoksiin ja nämä ominaisuuksien tarkkailijat kutsuvat joka kerta, kun ominaisuuden arvo muuttuu, vaikka ominaisuuden uusi arvo olisi sama kuin ominaisuuden nykyinen arvo.
Swiftissä ominaisuuksien muutoksia voidaan havainnoida käyttämällä seuraavia kahta havainnoitsijaa.
- willSet – Tätä havainnoitsijaa kutsutaan juuri ennen arvon tallentamista.
- didSet – Tätä havainnoitsijaa kutsutaan sen jälkeen, kun uusi arvo on tallennettu.
Swiftissä voidaan käyttää ominaisuuksien havainnoitsijoita missä tahansa tallennetuissa ominaisuustiedoissa lukuun ottamatta laiskasti tallennettuja ominaisuuksia.
Seuraavassa on esimerkki willSet- ja didSet-ominaisuuksien käytöstä swift-ohjelmointikielessä.
class Changes {
var num1: Int = 10 {
willSet(newvalue) {
print(”Arvo \(newvalue)”)
}
didSet {
if num1 > oldValue {
print(”Lisätään \(num1 – oldValue)”)
}
}
}
}
let result = Changes()
result.num1 = 34
result.num1 = 987
Jos havainnoit yllä olevaa esimerkkiä, käytimme willSet- ja didSet-observereita ja näitä ominaisuuksia kutsutaan aina kun ominaisuuden arvo muuttuu.
Kun ajamme yllä olevan ohjelman swift-leikkikentällä, saamme alla olevan kaltaisen tuloksen
arvo 34
lisätty 24
arvo 987
lisätty 953
Swift-tyypin omaisuus
Swiftissä, instanssiominaisuudet liittyvät luokan tai rakenteen instanssiin, tyyppiominaisuudet liittyvät itse tyyppiin, eivät kuulu mihinkään tyypin instanssiin.
Swiftissä voimme määritellä tyyppiominaisuuden staattisella avainsanalla ja laskennallisille tyyppiominaisuuksille ja luokkatyypeille meidän on käytettävä class
-avainsanaa, mutta se ei salli yliluokan metodien tai muuttujien ohittamista.
Seuraava on esimerkki tyyppiominaisuuden käytöstä swift-ohjelmointikielessä.
struktuuri typepro {
static let msg = ”Tervetuloa Tutlane”
}
class Class1 {
func test() { print(typepro.msg) }
}
class Class2 {
func test() { print(typepro.msg) }
}
var ss = Class1()
ss.test()
Jos tarkkailet yllä olevaa esimerkkiä, määrittelimme tyyppiominaisuuden staattisella avainsanalla ja käytämme tyyppiominaisuuden arvoja viittaamalla nimeen ja käyttämällä piste-syntaksia arvon käyttämiseen.
Kun suoritamme yllä olevan ohjelman swift-ohjelmointikielellä, saamme alla olevan kaltaisen tuloksen.
Swift-tyypin ominaisuuksien kysely ja asettaminen
Swiftissä tyypin ominaisuuksia kysytään ja sen jälkeen voimme asettaa arvon pisteen (.) syntaksilla aivan kuten luodessamme instanssin ja osoittaessamme arvoja ominaisuuksille. Tyyppiominaisuuksia kuitenkin kysytään ja ominaisuuksien arvo asetetaan tyypille, ei kyseisen tyypin instanssille.
Seuraavassa on esimerkki tyyppiominaisuuksien käytöstä swift-ohjelmointikielessä.
struct typerepo {
static var msg = ”Tervetuloa”
}
print(typerepo.msg)
typerepo.msg = ”Tervetuloa Tutlane”
print(typerepo.msg)
Jos havainnoit ylläolevaa esimerkkiä, loimme tyypin ominaisuuden ja asetamme arvon suoraan käyttämällä kyseisen tyypin instanssia.