Paul Hudson @twostraws 28 Mai 2020

Oppdatert For Xcode 12.5

type casting lar Oss fortelle Swift at et objekt det mener er Type A er faktisk Type B, som er nyttig når du arbeider med protokoller og klasse arv.

som du har sett, protokoller la oss gruppere sammen felles funksjonalitet slik at vi kan dele kode. Men noen ganger må vi gå i motsatt retning-vi må kunne se «du har et objekt som samsvarer med en protokoll, men jeg vil at du skal la meg bruke den som en bestemt type.»

for å demonstrere dette, her er et enkelt klassehierarki:

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

jeg har brukt standardverdier for hver eiendom, slik at vi ikke trenger å skrive en initializer.

Vi kan lage en forekomst av hver av dem, og legge dem til samme array:

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

Fordi Både Customer og Employee arver fra Person, Vil Swift vurdere at people konstant å være en Person – matrise. Så, hvis vi går over people, kan vi bare få tilgang til name av hvert element i arrayet – eller i det minste ville vi bare kunne gjøre det hvis det ikke var for type casting:

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, forsøker det å konvertere person først til Customer og deretter til Employee. Hvis en test passerer, kan vi da bruke de ekstra egenskapene som tilhører den klassen, samt egenskapen name fra foreldreklassen.

type casting er ikke spesielt frowned på I Swift, men jeg vil si at gjentatt type casting kan bety at du har et underliggende problem i koden din. Nærmere Bestemt Fungerer Swift best når Det forstår hvilke data du jobber med, og en type cast sier effektivt Til Swift: «jeg vet mer informasjon enn du gjør.»Hvis Du kan finne måter å formidle denne informasjonen Til Swift slik at Den forstår det også, fungerer det vanligvis bedre.

Hacking Med Swift er sponset av RevenueCat

SPONSET Bygge og vedlikeholde in-app abonnement infrastruktur er vanskelig. Heldigvis finnes det en bedre måte. Med RevenueCat kan du implementere abonnementer for appen din i timer, ikke måneder, slik at du kan komme tilbake til å bygge appen din.

Prøv det gratis

Sponsor Hacking Med Swift og nå verdens største Swift samfunnet!

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.