Paul Hudson @twostraws 28 maj 2020

uppdaterad för Xcode 12.5

typgjutning låter oss berätta för Swift att ett objekt som det tycker är typ A faktiskt är typ B, vilket är användbart när man arbetar med protokoll och klassarv.

som du har sett låter protokoll oss gruppera gemensam funktionalitet så att vi kan dela kod. Men vissa gånger måste vi gå i motsatt riktning – vi måste kunna se ”du har ett objekt som överensstämmer med ett protokoll, men jag skulle vilja att du låter mig använda det som en viss typ.”

för att demonstrera detta, här är en enkel klasshierarki:

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

jag har använt standardvärden för varje egenskap så vi behöver inte skriva en initializer.

vi kan skapa en instans av var och en av dem och lägga till dem i samma array:

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

eftersom både Customer och Employee ärver från Person, kommer Swift att överväga att people konstant är en Person array. Så om vi slingrar över people kommer vi bara att kunna komma åt name för varje objekt i matrisen-eller åtminstone skulle vi bara kunna göra det, om det inte var för typgjutning:

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)") }}

som du kan se försöker du konvertera person först till Customeroch sedan till Employee. Om något test passerar kan vi sedan använda de extra egenskaperna som tillhör den klassen, liksom egenskapen name från den överordnade klassen.

typgjutning är inte specifikt rynkad i Swift, men jag skulle säga att upprepad typgjutning kan innebära att du har ett underliggande problem i din kod. Mer specifikt fungerar Swift bäst när det förstår vilka data du arbetar med, och en typgjutning säger effektivt till Swift: ”Jag vet mer information än du gör.”Om du kan hitta sätt att förmedla den informationen till Swift så att den förstår det också, fungerar det vanligtvis bättre.

Hacking med Swift sponsras av RevenueCat

sponsrad byggnad och underhåll av abonnemangsinfrastruktur i appen är svårt. Lyckligtvis finns det ett bättre sätt. Med RevenueCat kan du implementera prenumerationer för din app på timmar, inte månader, så att du kan komma tillbaka till att bygga din app.

prova det gratis

sponsra Hacking med Swift och nå världens största Swift-community!

Lämna ett svar

Din e-postadress kommer inte publiceras.