Da li je moguće proširiti postojeću klasu ili strukturu dodavanjem nove osobine pomoću proširenja?
sobes.tech АИ
Одговор од АИ
U Swift-u, proširenja (extensions) omogućavaju dodavanje novih metoda, računarskih svojstava, inicijalizatora, podindeksa i ugniježđenih tipova postojećim klasama, strukturama ili enumeracijama. Međutim, proširenja ne mogu dodavati pohranjena svojstva. To je zbog toga što proširenja ne mijenjaju unutarnju strukturu tipa, već samo dodaju funkcionalnost.
Ako želite dodati novo svojstvo, možete koristiti računarsko svojstvo koje vraća vrijednost izračunatu u toku izvođenja, ali se ne pohranjuje u memoriji objekta.
Primjer računarskog svojstva u proširenju:
extension String {
var reversedString: String {
return String(self.reversed())
}
}
let text = "Hello"
print(text.reversedString) // Izlaz: "olleH"
Ako je potrebno pohraniti novu vrijednost, možete koristiti povezane objekte putem Objective-C runtime-a, ali to nije standardni način i primjenjuje se samo na klase koje nasljeđuju od NSObject.