Paul Hudson @twostraws május 28th 2020

frissítve az Xcode 12.5-hez

a Type casting lehetővé teszi számunkra, hogy elmondjuk a Swiftnek, hogy egy objektum, amelyet a típusnak tart, valójában B típusú, ami hasznos a protokollok és az osztály öröklése során.

mint láthatták, a protokollok lehetővé teszik a közös funkciók csoportosítását, hogy megoszthassuk a kódot. Néha azonban az ellenkező irányba kell mennünk – látnunk kell, hogy “van egy objektuma, amely megfelel egy protokollnak, de szeretném, ha hagyná, hogy egy adott típusként használjam.”

ennek bemutatásához itt van egy egyszerű osztályhierarchia:

class Person { var name = "Anonymous"}class Customer: Person { var id = 12345}class Employee: Person { var salary = 50_000}

minden tulajdonsághoz alapértelmezett értékeket használtam, így nem kell inicializálót írnunk.

mindegyikből létrehozhatunk egy példányt, és hozzáadhatjuk őket ugyanahhoz a tömbhöz:

let customer = Customer()let employee = Employee()let people = 

mivel mind a Customer, mind a Employee örökli a Person értéket, a Swift ezt a people állandót Person tömbnek tekinti. Tehát, ha hurkolunk people csak a tömb minden elemének name – jéhez férhetünk hozzá-vagy legalábbis csak akkor tudnánk ezt megtenni, ha nem lenne típusöntés:

for person in people { if let customer = person as? Customer { print("I'm a customer, with id \(customer.id)") } else if let employee = person as? Employee { print("I'm an employee, earning $\(employee.salary)") }}

mint látható, hogy megpróbálja átalakítani person először Customermajd Employee. Ha bármelyik teszt sikeres, akkor használhatjuk az adott osztályhoz tartozó extra tulajdonságokat, valamint a szülő osztály name tulajdonságát.

a típusú öntés nem kifejezetten rosszalló a Swift-ben, de azt mondanám, hogy az ismételt típusú öntés azt jelentheti, hogy alapvető problémája van a kódjában. Pontosabban, a Swift akkor működik a legjobban, ha megérti, hogy milyen adatokkal dolgozik, és egy type cast hatékonyan azt mondja a Swiftnek: “több információt tudok, mint te.”Ha megtalálja a módját, hogy továbbítsa ezt az információt a Swiftnek, hogy megértse azt is, az általában jobban működik.

hackelés Swift által szponzorált RevenueCat

szponzorált épület és fenntartása az alkalmazáson belüli előfizetési infrastruktúra nehéz. Szerencsére van egy jobb út. A RevenueCat segítségével órákon belül megvalósíthatja az alkalmazás előfizetéseit, nem hónapok, így visszatérhet az alkalmazás felépítéséhez.

próbáld ki ingyen

szponzor hackelés Swift és eléri a világ legnagyobb Swift közösség!

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.