Začeli bomo z ustvarjanjem strukture, ki vsebuje podatke za posamezno trgovino.
Trgovina je sestavljena iz amount
A price
In value
. Vsi posli so shranjeni v TradesModel
, ki bo opravil vse potrebne izračune za DCA (povprečje stroškov v dolarjih).
O didSet
opazovalec lastnosti se uporablja tako, da trades
array dobi novo prazno trgovanje, ko želi uporabnik povečati število prikazanih trgovanj.
To ohranja velikost matrike v skladu s številom, ki ga pričakujemo na zaslonu, in odpravlja možnost napak indeksa izven obsega.
Vmesnik bo v obliki tabele s tremi stolpci: znesek, cena in vrednost. Ti so ustrezno usklajeni z lastnostmi trgovine, od katerih bo vsaka nastavljena po meri TextField
ki se bo imenoval NumberTextField
.
Preden začnemo s tem, moramo ustvariti preprosto vrstico glave, ki nam bo dala naslov za vsakega od naših stolpcev. Ne bi bilo drugega načina za razlikovanje zneska od cene ali vrednosti, če ne bi bilo jasno, kateri je kateri.
Morda boste opazili, da ima celoten HStack zgoraj disabled
modifikator nastavljen na true
. To daje vsakemu TextField
enak videz kot drugi v aplikaciji, vendar uporabnik teh glav ne more urejati, kar hoče.
O NumberTextField
premosti vrzel med a TextField
, ki uporablja a String
za vnos in a Double
, ki je oblika, v kateri želimo, da so naši podatki.
O TextField
ima decimalno tipkovnico, zato običajna alfanumerična tipkovnica ne bo prikazana. To dramatično zmanjša število možnih znakov, vendar še vedno nič ne preprečuje uporabniku, da vnese več pik. To se ne bi uspešno pretvorilo v a Double
, zato ne želimo, da bi bilo to mogoče.
Razširitev String
zagotavlja izračunano lastnost, ki vam omogoča enostavno preverjanje, ali obstaja več pik, in to je shranjeno v valid
nepremičnine.
Ko je vnos neveljaven, se TextField
bo vnos prikazal rdeče in ne bo poskušal pretvoriti vrednosti v a Double
. Če je veljavna, bo vrednost nastavljena in poslana nazaj v Binding
.
TotalRowView
izračuna vsoto vseh zneskov trgovanja, tako da lahko vidite, koliko imate. Tukaj je izračunan in prikazan tudi skupni strošek. Med njimi je povprečje stroškov v dolarjih, ki se izračuna tako, da se skupna vrednost deli s skupnim zneskom. Vsaka od teh vrednosti je prikazana kot stalni niz v a TextField
ki jih ni mogoče urejati, tako da imajo enak slog kot preostali del aplikacije.
TradeQuantityView
omogoča nadzor nad številom vrstic. Ker vsaka vrstica predstavlja trgovanje, boste želeli dodajati nove posle, ko jih sklepate. Ta vrstica je preprosto a Stepper
ki prikazuje število poslov.
Na žalost Stepper
zahteva zaprt obseg možnih vrednosti, zato mora biti največje število poslov trdo kodirano. To največje število je lahko karkoli želite, vendar je nemogoče določiti obseg brez največje vrednosti.
Na nek način je to najpomembnejši pogled, saj vam omogoča vnos podatkov za izračun povprečne cene v dolarjih. Ko znesek ali cena TextField
je urejeno, onChange
zaprtje kliče setValue
Funkcija.
To znova izračuna vrednost, ki je preprosto množenje drugih dveh števil. Posel se nato posodobi v matriki poslov, ki se posreduje kot a @Binding
premoženje. Izvede se preverjanje, da se zagotovi, da pričakovani indeks obstaja v matriki, s čimer se prepreči napaka indeksa izven obsega.
Ker pa je posodabljanje posla, ki ne obstaja v nizu, nepričakovano vedenje, sem vseeno dodal fatalError
to pojasnjuje, zakaj je to stanje neuspeha.
Glavna aplikacija je preprosto kombinacija vseh vrstic, ki so bile do sedaj ustvarjene v SwiftUI Form
. To ji daje videz, podoben aplikaciji Nastavitve za iOS, in samodejno zapolni zaslon katere koli naprave in se pomika, ko je preveč vrstic, da bi se prilegale na zaslon.
Ogledom se posreduje samo tisto, kar potrebujejo, na primer skupno število poslov za TradeQuantityView
ter skupni znesek in vrednost za TotalRowView
.
A ForEach
se uporablja za prikaz ene trgovine za vsako število do skupnega števila poslov, ki jih je izbral TradeQuantityView
, in indeks se posreduje, tako da se lahko matrika posodobi, ko se izvedejo spremembe.
Takole bi moralo izgledati:
- vsi
- aplikacija
- izgradnjo
- zaprto
- Zaprtje
- Ustvarjanje
- cryptocurrency
- datum
- DID
- Dollar
- EU
- EV
- Napaka
- fit
- obrazec
- format
- funkcija
- vrzel
- tukaj
- Kako
- hr
- HTTPS
- ia
- Povečajte
- Indeks
- iOS
- IP
- IT
- vrstica
- srednje
- številke
- Ostalo
- preprečevanje
- Cena
- nepremičnine
- območje
- REST
- Zaslon
- izbran
- nastavite
- Enostavno
- Velikosti
- So
- Začetek
- začel
- Država
- sledenje
- Sledenje
- trgovini
- Trgovanja z dobičkom
- us
- vrednost
- Poglej