Ve swiftu se vlastnosti používají k popisu atributů objektu a mohou to být konstanty nebo proměnné ve třídách, strukturách nebo výčtech.
Ve swiftu se vlastnosti používají k ukládání hodnot tříd, struktur nebo výčtů a vlastnosti mají metody getter a setter, které upravují nebo nastavují hodnoty vlastností na základě našich požadavků.
- Swift Define a Property
- Rychlé přiřazení a přístup k vlastnostem
- Uložené vlastnosti ve swiftu
- Uložené vlastnosti pro konstantní instance struktury
- Swift Lazy Stored Properties
- Swift Computed Properties
- Vlastnosti vypočtené pouze pro čtení ve swiftu
- Swift Property Observer
- Vlastnost typu swift
- Dotazování a nastavování vlastností typu ve swiftu
Swift Define a Property
Následuje jednoduchý příklad vytvoření třídy s vlastnostmi v programovacím jazyce swift.
třída UserDetails {
var firstName:
var lastName:
}
Pokud si všimnete výše uvedeného příkladu, definovali jsme třídu „UserDetails“ se dvěma vlastnostmi (firstName, lastName).
Rychlé přiřazení a přístup k vlastnostem
Následující příklad deklarace a přiřazení hodnot definovaným vlastnostem ve třídě:
třída UserDetails {
var firstName: String = „“
var lastName:
}
var uinfo = UserDetails()
uinfo.firstName = „Suresh“
uinfo.lastName = „Dasari“
print(„Name: \( uinfo.firstName) \(uinfo.lastName)“)
Pokud si všimnete výše uvedeného příkladu, definovali jsme dvě vlastnosti „firstName“, „lastName“ a tyto hodnoty jsou přiřazeny třídě „UserDetails“. Poté jsme vytvořili instanci pro tuto třídu a přistupujeme k vlastnostem v rámci třídy, abychom jim přiřadili hodnoty na základě našich požadavků.
Pokud spustíme výše uvedený program ve swift playground, dostaneme výsledek, jak je uvedeno níže
Stejným způsobem můžeme v programovacím jazyce swift definovat a zpřístupňovat vlastnosti ve strukturách a výčtech na základě našich požadavků.
V programovacím jazyce swift máme k dispozici různé typy vlastností, kterými jsou
- Uložené vlastnosti
- Vypočítávané vlastnosti
Uložené vlastnosti ve swiftu
Uložená vlastnost je konstanta nebo proměnná a je uložena jako součást instance určité třídy nebo struktury. Uloženou vlastnost lze použít k uložení proměnné s klíčovým slovem var
a konstanty s klíčovým slovem let
.
Uložené vlastnosti můžeme v rámci její definice zadat výchozí hodnoty a počáteční hodnoty uložené vlastnosti můžeme při její inicializaci upravit.
Nyní si na příkladu ukážeme, jak definovat uložené vlastnosti ve třídách a jak modifikovat počáteční hodnoty uložených vlastností při jejich inicializaci.
Následující příklad je definicí uložených vlastností jako součásti třídy nebo struktury v programovacím jazyce swift.
struct UserDetails {
var firstName:
let lastName: String
}
var uinfo = UserDetails(firstName: „Suresh“, lastName: “ Dasari“)
print(„Name: \( uinfo.firstName) \(uinfo.lastName)“)
Pokud si všimnete výše uvedeného příkladu, definovali jsme dvě uložené vlastnosti (firstName, lastName), jednu jako proměnnou (var
) a druhou jako konstantu (let
) s počátečními hodnotami. Poté jsme vytvořili instanci struktury a při její inicializaci jsme upravili počáteční hodnoty.
Pokud výše uvedený program spustíme ve swift playgroundu, dostaneme výsledek jako na obrázku níže
Uložené vlastnosti pro konstantní instance struktury
V programovacím jazyce swift můžeme definovat uložené vlastnosti ve třídách, strukturách, výčtech na základě našich požadavků. V případě, že definujeme konstantní vlastnost s počáteční hodnotou, pak není možné, abychom tuto hodnotu měnili, protože jakmile je jednou konstantní proměnné přiřazena hodnota, která by měla být v celé aplikaci stejná.
V případě, že se pokusíme modifikovat hodnotu konstantní vlastnosti během její inicializace nebo s instancí třídy, kompilátor vyhodí chybu.
Následující příklad je modifikace hodnoty konstantní uložené vlastnosti po inicializaci hodnoty během vytváření instance třídy.
struct UserDetails {
var firstName: String = „Rohini“
let lastName: String
}
var uinfo = UserDetails(firstName: „Suresh“, lastName: “ Dasari“)
uinfo.lastName = „Alavala“
print(„Name: \( uinfo.firstName) \(uinfo.lastName)“)
Pokud si všimnete výše uvedeného příkladu, definovali jsme konstantní vlastnost „lastName“ a při vytvoření instance třídy jsme proměnné přiřadili hodnotu. Poté se opět pokoušíme změnit hodnotu konstantní proměnné.
Pokud se pokusíme spustit výše uvedený příklad ve swift playground, dostaneme chybu, jak je uvedeno níže
Error: cannot assign to property: ‚lastName‘ is a ‚let‘ constant
Jakmile přiřadíme konstantní vlastnosti hodnotu, která by měla být v celé aplikaci stejná, jinak to vyhodí chybu. Další informace o konstantách naleznete v tomto článku Swift Constants.
Swift Lazy Stored Properties
Ve swiftu je lazy stored property vlastnost, jejíž počáteční hodnota se načte až při prvním použití hodnoty vlastnosti. Ve swiftu můžeme definovat líně uloženou vlastnost pomocí klíčového slova lazy
před její deklarací.
Ve swiftu jsou líně uložené vlastnosti užitečné, když se počáteční hodnota vlastnosti nemusí načítat, dokud není v aplikaci použita. Předpokládejme, že máme jednu vlastnost a potřebujeme provést nějaké složité operace pro načtení nebo inicializaci hodnoty, ale je to vyžadováno pouze na určitých místech, v takovém případě, pokud použijeme líně uložené vlastnosti, nebudou se tyto hodnoty načítat, dokud je nepoužijeme v našem kódu.
Nyní si na příkladech ukážeme, jak používat líně uložené vlastnosti v aplikacích swift.
Následuje příklad použití líně uložené vlastnosti v programovacím jazyce swift.
třída Student {
var name: String
lazy var studentInfo: String = {
return „Welcome to Tutlane, \(self.name)!“
}()
init(name: String) {
self.name = name
}
}
let stu = Student(name: „Suresh“)
print(stu.studentInfo)
Pokud pozorujete výše uvedený příklad, definovali jsme líně uloženou vlastnost „studentInfo“ pomocí klíčového slova lazy
. Hodnota této vlastnosti se nenačte, dokud příkaz print nezavolá vlastnost z instance třídy student.
Pokud spustíme výše uvedený program ve swift playground, dostaneme výsledek, jak je uvedeno níže
Takto můžeme použít líně uložené vlastnosti v programovacím jazyce swift na základě našich požadavků.
Tady si musíme uvědomit, že vždy musíme deklarovat líně uložené vlastnosti jako proměnnou (var), protože její hodnotu nezískáme, dokud není dokončena inicializace instance, ale pro konstantní (let) vlastnosti musí mít hodnotu před dokončením inicializace, to je důvod, proč vždy musíme definovat líně uložené vlastnosti jako proměnné.
Swift Computed Properties
Ve swiftu na rozdíl od uložených vlastností nebudou vypočtené vlastnosti uchovávat hodnotu, místo toho budou vypočtené vlastnosti poskytovat getter a volitelný setter pro nepřímé získávání a nastavování hodnot jiných vlastností. Vypočtené vlastnosti můžeme definovat ve třídách, strukturách a výčtech na základě našich požadavků.
Následující příklad definování vypočtených vlastností pomocí getteru a setteru pro nastavení hodnot v programovacím jazyce swift.
třída Circle {
var radius : Double?
var cval : Double?
var Area: Double {
get {
return radius! * radius!
}
set (newArea){
cval = Double(newArea) * 3,14
}
}
}
let result = Circle()
result.Area = 20
print(result.cval)
Pokud pozorujete výše uvedený příklad, nastavujeme novou hodnotu vlastnosti „Area“ pomocí getteru a setteru vlastností.
Pokud spustíme výše uvedený program v playgroundu swiftu, dostaneme výsledek jako na obrázku níže
Takto můžeme použít vypočtené vlastnosti v programovacím jazyce swift pro použití hodnot bez ukládání na základě našich požadavků.
Vlastnosti vypočtené pouze pro čtení ve swiftu
Výpočtová vlastnost, která má pouze getter, ale nemá setter, je známá jako vypočtená vlastnost pouze pro čtení. Ve swiftu můžeme přistupovat k vypočteným vlastnostem pouze pro čtení pomocí tečkové syntaxe (.) a vždy vrací hodnotu.
Následující příklad použití vypočtených vlastností pouze pro čtení v programovacím jazyce swift.
třída Multiplication {
var num1 : Int = 5
var num2 : Int = 5
var multiply: Int {
get {
return num1 * num2
}
}
}
let r = Multiplication()
print(r.multiply)
V uvedeném příkladu jsme ve třídě definovali dvě vlastnosti s výchozími hodnotami a pomocí getteru tato dvě čísla vynásobili. Poté jsme vytvořili instanci třídy a přistupujeme k hodnotě getteru pomocí tečkové (.) syntaxe.
Pokud spustíme výše uvedený program na hřišti swift, dostaneme výsledek jako na obrázku níže
Takto můžeme v programovacím jazyce swift použít vypočtené vlastnosti pouze pro čtení k nastavení hodnot pomocí vlastnosti getter.
Swift Property Observer
V jazyce swift se k pozorování a reakci na změny hodnoty vlastnosti používají pozorovatelé vlastností a tyto pozorovatelé vlastností se zavolají vždy, když se změní hodnota vlastnosti, i když je nová hodnota vlastnosti stejná jako aktuální hodnota vlastnosti.
Ve swiftu lze změny ve vlastnostech pozorovat pomocí následujících dvou pozorovatelů:
- willSet – Tento pozorovatel se volá těsně před uložením hodnoty
- didSet – Tento pozorovatel se volá po uložení nové hodnoty
Ve swiftu můžeme pozorovatele vlastností použít v libovolných uložených vlastnostech, kromě líně uložených vlastností.
Následuje příklad použití vlastností willSet a didSet v programovacím jazyce swift.
třída Changes {
var num1: Int = 10 {
willSet(newvalue) {
print(„Hodnota \(newvalue)“)
}
didSet {
if num1 > oldValue {
print(„Added \(num1 – oldValue)“)
}
}
}
}
let result = Changes()
result.num1 = 34
result.num1 = 987
Pokud pozorujete výše uvedený příklad, použili jsme pozorovatele willSet a didSet a tyto vlastnosti jsou volány vždy, když se mění hodnota vlastnosti.
Když spustíme výše uvedený program na hřišti swift, dostaneme výsledek, jak je uvedeno níže
Hodnota 34
Přidáno 24
Hodnota 987
Přidáno 953
Vlastnost typu swift
V swift, jsou instanční vlastnosti spojeny s instancí třídy nebo struktury, typové vlastnosti jsou spojeny se samotným typem, nepatří žádné instanci typu.
V systému swift můžeme definovat typovou vlastnost pomocí klíčového slova static a pro vypočtené typové vlastnosti a pro typy tříd musíme použít klíčové slovo class
, ale to neumožní přepsat metody nebo proměnné nadtřídy.
Následuje příklad použití typové vlastnosti v programovacím jazyce swift.
struktura typepro {
static let msg = „Welcome to Tutlane“
}
třída Class1 {
func test() { print(typepro.msg) }
}
třída Class2 {
func test() { print(typepro.msg) }
}
var ss = Class1()
ss.test()
Pokud si všimnete výše uvedeného příkladu, definovali jsme typovou vlastnost pomocí klíčového slova static a k hodnotám typových vlastností přistupujeme odkazem na název a pomocí tečkové syntaxe přistupujeme k hodnotě.
Pokud spustíme výše uvedený program v programovacím jazyce swift, dostaneme výsledek, jak je uvedeno níže.
Dotazování a nastavování vlastností typu ve swiftu
Ve swiftu se na vlastnosti typu dotazujeme a poté můžeme nastavit hodnotu pomocí tečkové (.) syntaxe stejně jako při vytváření instance a přiřazování hodnot vlastnostem. Na typové vlastnosti se však dotazujeme a nastavujeme hodnotu vlastností na typu, nikoli na instanci tohoto typu.
Následující příklad použití typových vlastností v programovacím jazyce swift.
struct typerepo {
static var msg = „Welcome“
}
print(typerepo.msg)
typerepo.msg = „Welcome to Tutlane“
print(typerepo.msg)
Pokud pozorujete výše uvedený příklad, vytvořili jsme vlastnost type a nastavujeme hodnotu přímo pomocí instance tohoto typu.