Sobes.tech
Junior — Middle

Lze rozšířit stávající třídu nebo strukturu přidáním nové vlastnosti pomocí rozšíření?

sobes.tech AI

Odpověď od AI

Ve Swiftu umožňují rozšíření (extensions) přidávat nové metody, vypočítané vlastnosti, inicializátory, indexery a vnořené typy ke stávajícím třídám, strukturám nebo výčtům. Nicméně rozšíření nemohou přidávat uložené vlastnosti. To je způsobeno tím, že rozšíření nemění vnitřní strukturu typu, pouze přidávají funkčnost.

Pokud chcete přidat novou vlastnost, můžete použít vypočítanou vlastnost, která vrací hodnotu vypočítanou za běhu, ale není uložena v paměti objektu.

Příklad vypočítané vlastnosti v rozšíření:

extension String {
    var reversedString: String {
        return String(self.reversed())
    }
}

let text = "Hello"
print(text.reversedString) // Výstup: "olleH"

Pokud je třeba uložit novou hodnotu, lze použít asociované objekty přes runtime Objective-C, ale to není standardní metoda a platí pouze pro třídy dědící od NSObject.