Inizieremo creando una struttura che contenga i dati per una singola operazione.
Un'operazione è composta da un amount
, un price
, e un value
. Tutte le operazioni sono archiviate nel file TradesModel
, che effettuerà tutti i calcoli necessari per il DCA (media del costo del dollaro).
Il didSet
l'osservatore della proprietà viene utilizzato in modo che trades
all'array viene assegnata una nuova operazione vuota quando l'utente desidera aumentare il numero di operazioni visualizzate.
Ciò mantiene la dimensione dell'array in linea con il numero che ci aspettiamo di vedere sullo schermo, eliminando la possibilità di errori di indice fuori intervallo.
L'interfaccia avrà la forma di una tabella con tre colonne: importo, prezzo e valore. Questi si allineano opportunamente con le proprietà di un'operazione, ognuna delle quali verrà impostata utilizzando la personalizzazione TextField
che sarà chiamato NumberTextField
.
Prima di iniziare, dobbiamo creare una semplice riga di intestazione che ci dia un titolo per ciascuna delle nostre colonne. Non ci sarebbe altro modo per distinguere l'importo dal prezzo o dal valore se non rendessimo evidente quale sia l'uno e l'altro.
Potresti notare che l'intero HStack sopra ha l'estensione disabled
modificatore impostato su true
. Questo dà ciascuno TextField
lo stesso aspetto degli altri nell'app, ma l'utente non può modificare queste intestazioni come desidera.
Il NumberTextField
colma il divario tra a TextField
, che utilizza a String
per l'input e a Double
, che è il formato in cui vogliamo che siano i nostri dati.
Il TextField
ha una tastiera decimale, quindi la tastiera alfanumerica convenzionale non verrà visualizzata. Ciò riduce drasticamente il numero di caratteri possibili, ma non c'è ancora nulla che impedisca all'utente di inserire più punti. Questo non verrebbe convertito correttamente in a Double
, quindi non vogliamo che ciò sia possibile.
Un'estensione di String
fornisce una proprietà calcolata che consente di verificare facilmente se sono presenti più punti e questa viene archiviata nel file valid
proprietà.
Quando l'input non è valido, il file TextField
visualizzerà l'input come rosso e non tenterà di convertire il valore in a Double
. Se è valido, il valore verrà impostato e rispedito al file Binding
.
TotalRowView
calcola la somma di tutti gli importi commerciali in modo che tu possa vedere quanto possiedi. Anche il costo totale viene calcolato e mostrato qui. Tra di loro c'è la media del costo in dollari, che viene calcolata dividendo il valore totale per l'importo totale. Ciascuno di questi valori viene visualizzato come una stringa costante in a TextField
che non possono essere modificati, in modo che abbiano lo stesso stile del resto dell'app.
TradeQuantityView
ti permette di controllare quante righe ci sono. Poiché ogni riga rappresenta uno scambio, ti consigliamo di aggiungere nuovi scambi man mano che li effettui. Questa riga è semplicemente a Stepper
che mostra il numero di operazioni.
Purtroppo Stepper
richiede un intervallo chiuso di valori possibili, quindi un numero massimo di operazioni deve essere codificato. Questo numero massimo può essere qualsiasi cosa tu voglia, ma è impossibile specificare un intervallo senza un valore massimo.
In un certo senso questa è la visualizzazione più importante, poiché consente di inserire i dati affinché venga effettuato il calcolo del costo medio in dollari. Quando l'importo o il prezzo TextField
viene modificato, il onChange
la chiusura chiama il setValue
funzione.
Questo calcola nuovamente il valore, che è semplicemente una moltiplicazione degli altri due numeri. L'operazione viene quindi aggiornata nell'array trade, che viene passato come a @Binding
proprietà. Viene effettuato un controllo per garantire che l'indice previsto esista nell'array, impedendo un errore di indice fuori intervallo.
Tuttavia, poiché aggiornare un'operazione che non esiste nell'array è un comportamento inaspettato, ho comunque aggiunto un file fatalError
questo spiega perché questo è uno stato di fallimento.
L'app principale è semplicemente una combinazione di tutte le righe che sono state create finora all'interno di una SwiftUI Form
. Questo gli conferisce un aspetto molto simile all'app Impostazioni per iOS e riempirà automaticamente lo schermo di qualsiasi dispositivo e scorrerà quando ci sono troppe righe per adattarsi allo schermo.
Alle visualizzazioni viene trasmesso solo ciò di cui hanno bisogno, ad esempio il numero totale di operazioni TradeQuantityView
e l'importo totale e il valore per TotalRowView
.
A ForEach
viene utilizzato per mostrare un'operazione per ogni numero fino al numero totale di operazioni selezionate da TradeQuantityView
e l'indice viene passato in modo che l'array possa essere aggiornato quando vengono apportate modifiche.
Ecco come dovrebbe apparire:
- Tutti
- App
- costruire
- chiuso
- chiusura
- Creazione
- criptovaluta
- dati
- DID
- Dollaro
- EU
- EV
- Fallimento
- in forma
- modulo
- formato
- function
- divario
- qui
- Come
- hr
- HTTPS
- ia
- Aumento
- Index
- iOS
- IP
- IT
- linea
- medie
- numeri
- Altro
- prevenzione
- prezzo
- proprietà
- gamma
- REST
- allo
- selezionato
- set
- Un'espansione
- Taglia
- So
- inizia a
- iniziato
- Regione / Stato
- pista
- Tracking
- commercio
- mestieri
- us
- APPREZZIAMO
- Visualizza