Paul Hudson @twostraws 28 mai 2020

actualizat pentru Xcode 12.5

tip casting ne permite să spunem Swift că un obiect crede că este de tip A este de fapt de tip B, care este util atunci când se lucrează cu protocoale și moștenire de clasă.

după cum ați văzut, protocoalele ne permit să grupăm funcționalitatea comună pentru a putea partaja codul. Cu toate acestea, uneori trebuie să mergem în direcția opusă – trebuie să putem vedea „aveți un obiect care se conformează unui protocol, dar aș vrea să mă lăsați să-l folosesc ca un anumit tip.”

pentru a demonstra acest lucru, iată o ierarhie simplă de clasă:

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

am folosit valori implicite pentru fiecare proprietate, astfel încât nu avem nevoie pentru a scrie un inițializator.

putem crea o instanță a fiecăruia dintre acestea și le putem adăuga la aceeași matrice:

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

deoarece atât Customer cât și Employee moștenesc de la Person, Swift va considera că people constantă este o matrice Person. Deci, dacă ne-am bucla peste people vom fi doar posibilitatea de a accesa name de fiecare element din matrice – sau cel puțin ne-ar fi doar posibilitatea de a face acest lucru, în cazul în care nu au fost pentru tipul de turnare:

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

după cum puteți vedea, aceasta încearcă să convertească person mai întâi la Customer și apoi la Employee. Dacă trece oricare test, putem folosi proprietățile suplimentare care aparțin acelei clase, precum și proprietatea name din clasa părinte.

tipul de turnare nu este în mod specific încruntat în Swift, dar aș spune că turnarea repetată de tip ar putea însemna că aveți o problemă de bază în codul dvs. Mai precis, Swift funcționează cel mai bine atunci când înțelege cu ce date lucrați, iar un tip de distribuție îi spune în mod eficient lui Swift: „știu mai multe informații decât tine.”Dacă puteți găsi modalități de a transmite aceste informații către Swift, astfel încât să o înțeleagă și ea, de obicei funcționează mai bine.

Hacking cu Swift este sponsorizat de RevenueCat

construirea sponsorizat și menținerea infrastructurii de abonament în aplicație este greu. Din fericire, există o cale mai bună. Cu RevenueCat, puteți implementa abonamente pentru aplicația dvs. în ore, nu luni, astfel încât să puteți reveni la construirea aplicației.

încercați-l gratuit

sponsorizați Hacking-ul cu Swift și ajungeți la cea mai mare comunitate Swift din lume!

Lasă un răspuns

Adresa ta de email nu va fi publicată.