Abordarea veteranilor catre generatia urmatoare

O intrebare de interviu pe care am vazut-o aparand pentru numeroase posturi de dezvoltatori iOS este aceea de a denumi si explica evenimentele View Controller Lifecycle (in ordine). Sunt:

  • loadView
  • viewDidLoad
  • viewWillAppear
  • viewWillLayoutSubviews
  • viewDidLayoutSubviews
  • viewDidAppear
  • viewWillDisappear
  • viewDidDisappear
  • viewDidUnload

Ceea ce este interesant la aceasta bucata de cunostinte despre iOS este ca este (probabil ca va fi in curand) de fapt destul de relevant. Daca View Controller face ceva dincolo de simpla trecere la pagina urmatoare sau, poate, exista doar fara alt scop, atunci va trebui sa implementati cel putin unul dintre aceste evenimente pentru a declansa rularea oricarui alt lucru asociat.

Aceste evenimente au si un scop. Ati putea colecta date inainte de a le furniza catre interfata dvs. de utilizare. Poate ca asteptati ca interfata dvs. de utilizator sa fie afisata inainte ca o animatie sa se declanseze. Sau poate trebuie sa salvati modificarile inainte de a pleca si de a trece la urmatoarea vizualizare.

A venit o schimbare

Acum, cand SwiftUI este aici, viitorul dezvoltarii native Apple UI a fost, intr-un anumit sens, dezvaluit. Si pentru multi dezvoltatori veterani, exista o serie de intrebari legate de schimbarea viitoare.

Nabil Kazi, propriul Flawless, aprofundeaza speranta de viata a Storyboard-urilor si daca SwiftUI isi explica sau nu soarta.

Deci, atunci cand vine vorba de un astfel de subiect de baza al interfetei de utilizare, cum ar fi ciclul de viata VC, intrebarea logica pe care si-o pun multi dezvoltatori veterani iOS (si unii pe altii) este: acest ciclu de viata (sau cel putin ceva similar) exista in continuare sau exista ceva nou cu totul?

Retineti diferenta

Chiar chiar inainte de a intra in noul ciclu de viata si de toate aceste discutii despre View Controllers, exista o diferenta imediata care ar trebui subliniata. Nu exista controlere de vizualizare in SwiftUI.

Asta pentru ca SwiftUI nu este UIKit. Desi pot interactiona, SwiftUI este un cadru UI independent. Cu aceasta, Apple spune „mergem inainte”.

Ok, ca sa fiu sincer, nu exista un ciclu de viata View. Este intr-adevar pentru ca nu mai trebuie sa ne gandim neaparat in termenii unui ciclu de viata al interfetei de utilizare (voi intra in asta mai tarziu). Paul Hudson de la Hacking with Swift subliniaza chiar si cum s-a diminuat cyle-ul in SwiftUI si modul in care acest lucru reduce de fapt dezordinea in codul nostru:

„Codul tau SwiftUI va reprezenta poate 10–20% din ceea ce a fost codul tau UIKit – aproape totul dispare pentru ca nu ne mai repetam, nu mai trebuie sa gestionam atatea metode ale ciclului de viata si multe altele.

pajotes folladas caseras reales
abuelas sexi pajas en español
xxx españa coños ricos
orgias abuelas incesto lesbianas
follando abuelas brutal tops
danna paola desnuda casadas españolas follando
feet hentai mamadas de polla
sexo gratis incesto sexo hd
videos porno violada porno france
porno madre hijo español peliculas eroticas italianas
vídeos de sexo gratis xxxespañol
lesbianas preciosas incestoxxx
mujeres tetudas follando con mi mujer
madre española follando con su hijo videos xxx violadas
sexo con cincuentonas peliculas porno castellano
pilladas de torbes españolas masturbandose
maria patiño desnuda abuela porno
maduras en playas nudistas muy maduras follando
masaje final feliz fiestas xxx
madurafollando mi mujer me folla el culo

” – Paul Hudson, Hacking cu Swift

Dar asta nu schimba faptul ca exista „evenimente” seriale identificabile in viata unui View in SwiftUI. Cunoasterea acestora va fi cu siguranta utila pe masura ce treceti la SwiftUI.

Asadar, iata ce as considera „evenimentele” ciclului de viata in SwiftUI:

  • Vizualizati initializarea (termenul meu)
  • Fluxuri de stare si date
  • onAppear
  • onDispar

De unde vine aceasta lista

Am dedus aceasta lista foarte atent. Pentru onAppear si onDisappear , acestea sunt de fapt disponibile ca proprietati pe View si reflecta evenimentele „apar” in vechiul ciclu de viata, deci au fost destul de simple de identificat.

Initializarea vizualizarii parea evidenta atunci cand declarati proprietati si state. Cum a fost confirmat pentru mine a fost cand am primit aceasta eroare la setarea unei proprietati pe o functie pe care am plasat-o in aceeasi structura View:

Nu se poate utiliza membrul de instanta „someFunction” in initializatorul de proprietati; initializatoarele de proprietati ruleaza inainte ca „auto” sa fie disponibil

Acest lucru arata ca exista un eveniment de initializare inainte ca proprietatile View sa fie disponibile (chiar unul pentru celalalt), insa codul ar putea fi rulat totusi.

In cele din urma, exista fluxuri de date si de stat . Acesta este cu adevarat esential la ceea ce incearca sa faca Apple cu SwiftUI si Combine. Acesta nu este atat de mult un eveniment singular in ciclul de viata al unui View. Mai degraba, aceasta deschide o vedere pana la evenimente aproape nelimitate.

Se poate argumenta ca statele sunt legaturi si sunt ca declansatoare (cum ar fi un gest de atingere). Ele pot fi folosite asa, dar sunt, de asemenea, declansatoare care pot fi utilizate chiar pentru a determina daca sunt afisate o vizualizare sau ierarhia sa de subvizualizari. In jurul acestor modificari de stare ar putea exista logica pe care ati gasi-o in viewDidLoad / viewWillAppear si omologii lor. Prin urmare, le consider absolut ca parte a noului ciclu de viata.

Pentru a intelege noul ciclu de viata dintr-o vedere de pasare (joc de cuvinte), trebuie sa citim in propriile cuvinte ale Apple in ceea ce priveste SwiftUI:

Cu o sintaxa Swift declarativa, usor de citit si natural de scris, SwiftUI functioneaza perfect cu noile instrumente de proiectare Xcode pentru a va pastra codul si proiectarea perfect sincronizate. – Mar

Cand aliniati acea declaratie in functie de caracteristicile si capacitatile SwiftUI, va dati seama ca este de fapt o declaratie incarcata. Mai exact, ultima afirmatie referitoare la cod si design vorbeste despre mentalitatea Apple in legatura cu noul ciclu de viata.

In timp ce in UIKit VC LifeCycle este o cerinta si dicteaza WWWWH al codului nostru, natura declarativa (si reactiva) a SwiftUI permite datelor sa aiba un cuvant de spus in afara de Views. Cu alte cuvinte, Vizualizarile si Codul au ajuns la un fel de compromis intre ele, iar relatia lor a trecut de la „Este complicat”.

Acest lucru este evidentiat in noul ciclu de viata. In timpul initializarii vizualizarii, putem rula orice cod si incarca orice date de care avem nevoie, astfel incat rezultatele sa poata / vor fi utilizate de interfata de utilizare atunci cand se reda. Orice modificare a starii (sau a oricarui alt element de combinare) poate fi inconjurata in cod care duce la reactia UI. Si didAppear si didDisappear acopera „evenimentele de viata” de care avem nevoie de interfata de utilizare pentru a ne informa daca si cand declaram ca avem nevoie de ele (nu este necesara utilizarea acestora).

Aceasta filozofie ar trebui sa fie familiara oricui a folosit un alt cadru declarativ si / sau reactiv. Apple accepta si accepta aceste concepte intr-un mod care functioneaza cel mai bine pentru platformele lor.

In timp ce am incercat sa traduc doua generatii de cicluri de viata unul catre celalalt, solutia reala ar fi deschiderea si adoptarea abordarilor mai moderne ale IU daca ar trebui sa luati SwiftUI. Cu siguranta, mai este ceva timp inainte de a fi nevoie sa o imbratiseze pe deplin, dar Apple a precizat ca aici intentioneaza sa se indrepte inainte.

Si, in sfarsit, nu declar ca aceasta este evanghelie. Mai degraba, m-a ajutat sa fac tranzitia mai usoara dupa ce am dezvoltat aplicatii native iOS de aproape 5 ani. Speranta mea este ca acest lucru ar putea ajuta si incuraja alti medici veterinari!

PS

Asigurati-va ca consultati articolul la care am facut referire mai sus, mai ales daca sunteti un veteran iOS Dev: