Aloitamme luomalla rakenteen, joka sisältää tiedot yksittäisestä kaupasta.
Kauppa koostuu amount
, The price
, Ja value
. Kaikki kaupat on tallennettu TradesModel
, joka tekee kaikki tarvittavat laskelmat DCA:ta varten (dollarikustannusten keskiarvo).
- didSet
ominaisuuden tarkkailijaa käytetään niin, että trades
taulukolle annetaan uusi tyhjä kauppa, kun käyttäjä haluaa lisätä näytettävien kauppojen määrää.
Tämä pitää taulukon koon linjassa sen numeron kanssa, jonka odotamme näkevän näytöllä, mikä eliminoi indeksialueen ulkopuolisten virheiden mahdollisuuden.
Käyttöliittymä on taulukon muodossa, jossa on kolme saraketta: summa, hinta ja arvo. Nämä vastaavat asianmukaisesti kaupan ominaisuuksia, joista jokainen asetetaan mukautetulla tavalla TextField
jota kutsutaan NumberTextField
.
Ennen kuin aloitamme sen, meidän on luotava yksinkertainen otsikkorivi, joka antaa meille otsikon jokaiselle sarakkeellemme. Ei olisi muuta tapaa erottaa summaa hinnasta tai arvosta, jos emme tekisi selväksi, kumpi on kumpi.
Saatat huomata, että koko yllä olevassa HStackissa on disabled
muuntaja asetettu arvoon true
. Tämä antaa jokaiselle TextField
ulkoasu on sama kuin muilla sovelluksessa, mutta käyttäjä ei voi muokata näitä otsikoita haluamakseen.
- NumberTextField
kattaa kuilun a TextField
, joka käyttää a String
syöttöä varten ja a Double
, jossa haluamme tietojemme olevan.
- TextField
on desimaalinäppäimistö, joten tavallista aakkosnumeerista näppäimistöä ei näytetä. Tämä vähentää mahdollisten merkkien määrää dramaattisesti, mutta silti mikään ei estä käyttäjää syöttämästä useita pisteitä. Tämä ei muuttaisi onnistuneesti muotoon a Double
, joten emme halua tämän olevan mahdollista.
Jatkoa String
tarjoaa lasketun ominaisuuden, jonka avulla voit helposti tarkistaa, onko olemassa useita pisteitä, ja tämä tallennetaan valid
omaisuutta.
Kun syöte on virheellinen, TextField
näyttää syötteen punaisena eikä yritä muuntaa arvoa a:ksi Double
. Jos se on voimassa, arvo asetetaan ja lähetetään takaisin Binding
.
TotalRowView
laskee kaikkien kauppasummien summan, jotta näet, kuinka paljon omistat. Myös kokonaiskustannus lasketaan ja näytetään tässä. Niiden välissä on dollarin kustannusten keskiarvo, joka lasketaan jakamalla kokonaisarvo kokonaismäärällä. Jokainen näistä arvoista näytetään vakiona a:ssa TextField
joita ei voi muokata, jotta niillä on sama tyyli kuin muulla sovelluksella.
TradeQuantityView
voit hallita kuinka monta riviä on. Koska jokainen rivi edustaa kauppaa, sinun kannattaa lisätä uusia kauppoja tehdessäsi niitä. Tämä rivi on yksinkertaisesti a Stepper
joka näyttää kauppojen määrän.
Valitettavasti Stepper
vaatii suljetun alueen mahdollisista arvoista, joten suurin määrä kauppoja on koodattava. Tämä enimmäismäärä voi olla mikä tahansa, mutta on mahdotonta määrittää aluetta ilman enimmäisarvoa.
Jollain tapaa tämä on tärkein näkymä, koska sen avulla voit syöttää tiedot dollarikustannusten keskiarvon laskemista varten. Kun määrä tai hinta TextField
on muokattu, onChange
sulkeminen kutsuu setValue
toiminto.
Tämä laskee arvon uudelleen, joka on yksinkertaisesti kahden muun luvun kertolasku. Kauppa päivitetään sitten kauppataulukkoon, joka välitetään a @Binding
omaisuutta. Tarkistetaan, että odotettu indeksi on taulukossa, mikä estää indeksin alueen ulkopuolisen virheen.
Kuitenkin, koska kaupan, jota ei ole taulukossa, päivittäminen on odottamatonta toimintaa, olen silti lisännyt fatalError
Tämä selittää, miksi tämä on epäonnistunut tila.
Pääsovellus on yksinkertaisesti yhdistelmä kaikista riveistä, jotka on tähän mennessä luotu SwiftUI:n sisällä Form
. Tämä antaa sille ulkonäön paljolti iOS:n Asetukset-sovelluksen kaltaiseksi, ja se täyttää automaattisesti minkä tahansa laitteen näytön ja vierittää, kun näytölle mahtuu liian monta riviä.
Näkymät välitetään vain, mitä he tarvitsevat, kuten kauppojen kokonaismäärä TradeQuantityView
ja kokonaismäärä ja arvo TotalRowView
.
A ForEach
käytetään näyttämään yksi kauppa kutakin numeroa kohden valitsemaansa kauppojen kokonaismäärään asti TradeQuantityView
, ja indeksi välitetään, jotta taulukko voidaan päivittää, kun muutoksia tehdään.
Tältä sen pitäisi näyttää:
- Kaikki
- sovelluksen
- rakentaa
- suljettu
- sulkeminen
- Luominen
- kryptovaluutta
- tiedot
- DID
- dollari
- EU
- EV
- Epäonnistuminen
- sovittaa
- muoto
- muoto
- toiminto
- kuilu
- tätä
- Miten
- hr
- HTTPS
- ia
- Kasvaa
- indeksi
- iOS
- IP
- IT
- linja
- keskikokoinen
- numerot
- Muut
- estää
- hinta
- omaisuus
- alue
- REST
- Näytön
- valittu
- setti
- Yksinkertainen
- Koko
- So
- Alkaa
- alkoi
- Osavaltio
- raita
- Seuranta
- kauppaa
- kaupat
- us
- arvo
- Näytä