Sobes.tech
Junior — Middle

Lehet-e meglévő osztályt vagy struktúrát bővíteni új tulajdonság hozzáadásával kiterjesztésekkel?

sobes.tech MI

Válasz az MI-től

Swiftben az extensionök lehetővé teszik, hogy meglévő osztályokhoz, struktúrákhoz vagy enumerációkhoz új módszereket, számított tulajdonságokat, inicializálókat, indexelőket és beágyazott típusokat adjunk hozzá. Azonban az extensionök nem képesek tárolt tulajdonságokat hozzáadni. Ennek oka, hogy az extensionök nem változtatják meg a típus belső szerkezetét, csupán funkcionalitást adnak hozzá.

Ha új tulajdonságot szeretnél hozzáadni, használhatsz számított tulajdonságot, amely futásidőben számított értéket ad vissza, de nem tárolódik az objektum memóriájában.

Példa egy számított tulajdonságra egy extensionben:

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

let text = "Hello"
print(text.reversedString) // Kimenet: "olleH"

Ha új értéket kell tárolni, használhatsz társított objektumokat az Objective-C runtime segítségével, de ez nem szokásos módszer, és csak az NSObject-ből származó osztályokra vonatkozik.