Так ведет себя мое приложение, и именно так я хочу, чтобы оно вело себя.< /p>
Вот код листа:
Код: Выделить всё
//
// TradingSheetView.swift
// Stock Search
//
// Created by Kishan on 4/29/24.
//
import SwiftUI
import SimpleToast
struct TradingSheetView: View {
@EnvironmentObject var root: ToastViewModel
@StateObject var viewModel = TradingSheetViewModel()
@Binding var isTrading: Bool
@Binding var company: Company?
@Binding var portfolio: Portfolio?
@Binding var wallet: Wallet?
private var tradingQuantity: Int {
let tradingQuantityInt = Int(viewModel.tradingQuantity)
// if tradingQuantityInt == nil {
// root.showToast(saying: "Please enter a valid amount")
// }
return tradingQuantityInt ?? 0
}
private var tradingAmount: Double {
return (viewModel.quote?.c ?? 0) * Double(tradingQuantity)
}
var body: some View {
ZStack {
VStack {
HStack {
Spacer()
Button {
isTrading.toggle()
} label: {
Image(systemName: "xmark")
.foregroundStyle(Color(.label))
}
}
Text("Trade \(company?.name ?? "") shares")
.bold()
Spacer()
HStack {
TextField("0",
text: $viewModel.tradingQuantity)
.font(.system(size: 100, weight: .light))
.keyboardType(.numberPad)
Text(tradingQuantity > 1 ? "Shares" : "Share")
.font(.largeTitle)
.offset(y: 20)
}
HStack {
Spacer()
Text("x $\((viewModel.quote?.c ?? 0).getTwoPointsString())/share = $\(tradingAmount.getTwoPointsString())")
}
Spacer()
Text("$\((wallet?.amount ?? 0).getTwoPointsString()) available to buy \(company?.ticker ?? "")")
.font(.caption)
.foregroundStyle(.secondary)
.padding()
HStack(spacing: 20) {
Button {
Task {
if tradingAmount > (wallet?.amount ?? 0) {
root.showToast(saying: "Not enough money to buy")
return
}
if tradingQuantity (portfolio?.quantity ?? 0) {
root.showToast(saying: "Not enough shares to sell")
return
}
if tradingQuantity
Подробнее здесь: [url]https://stackoverflow.com/questions/78406494/how-to-animate-this-in-swiftui[/url]