我有這個特定的資料,我想在我的應用程式中使用。
struct AssetData : Identifiable {
var id: Int Int
var title: String
var image: Image
var price: Int
var pricePerSec: Int
var own: Bool
}
class AssetDatas : ObservableObject {
@Published var assetData: [AssetData] = [] 。
init() {
getAssetData()
}
func getAssetData() {
let asset1 = AssetData(id: 0, title: "株"/span>,image: Image("asset1"), price: 1000, pricePerSec: 10000, own: false)
let asset2 = AssetData(id: 1, title: "時計",image: Image("asset2"), price: 2000, pricePerSec: 20000, own: false)
let asset3 = AssetData(id: 2, title: "車",影像。Image("asset3"), price: 3000 , pricePerSec: 50000, own: false)
let asset4 = AssetData(id: 3, title: "家",圖片。Image("asset4"), price: 4000, pricePerSec: 50000, own: false)
let asset5 = AssetData(id: 4, title: "ダイヤモンド",image: Image("asset5"), price: 5000, pricePerSec: 50000, own: false)
let asset6 = AssetData(id: 5, title: "船",影像。Image("asset6"), price: 6000, pricePerSec: 50000, own: false)
let asset7 = AssetData(id: 6, title: "飛行器",影像。Image("asset7"), price: 7000, pricePerSec: 50000, own: false)
let asset8 = AssetData(id: 7, title: "人工衛星",image: Image("asset8"), price: 8000, pricePerSec: 50000, own: false)
let asset9 = AssetData(id: 8, title: "月",圖片。Image("asset9"), price: 9000, pricePerSec: 50000, own: false)
let asset10 = AssetData(id: 9, title: "宇宙人",image: Image("asset10"), price: 10000, pricePerSec: 50000, own: false)
self.assetData.append(contentsOf: [
asset1,
asset2,
asset3,
asset4,
asset5,
資產6。
資產7。
資產8。
資產9
資產10
])
}
}
我正在尋找一種方法,當用戶點擊視圖中的一個按鈕時,改變陣列中的一個專案的值,如 "價格 "或 "所有權"。這可能嗎?
我的視圖是這樣的
struct AssetListView : View {
var level = 1
var user : UserData
var asset = AssetDatas()
private var buttonBackColor:Color = .yellow
private var buttonText: String = "買う"
let timer = Timer.publish(every: 1, on: .current, in: .common).autoconnect()
var body: some View {
ScrollView{
VStack(alignment: .leading){
ForEach(asset.assetData) { assets in.
HStack{
assets.image
.可調整大小()
.frame(width:50, height: 50)
Text(assets.title)
.font(.headline)
Spacer()
Text("金額: (assets.price)円")
Button(action: {
if user.pocketMoney >= assets. 價格 && buttonText == "買う" {
user.pocketMoney -= assets.price
self.buttonText = "売る"self.buttonBackColor = .blue
};if buttonText == "売る" {
buttonText = "買う"{
self.buttonBackColor = .blue
user.pocketMoney = assets.price
} else {
}
}) {
Text(buttonText)
.padding(10)
.background(buttonBackColor)
.cornerRadius(15)
}
}
}
.foregroundColor(.white)
.padding()
.background(Color("Color3").cornerRadius(10) .opacity(0.8)
.padding(.horizontal)
}
}
}
在視圖中,我有一個按鈕,當我點擊按鈕時,我想改變按鈕的價格,而且我還想改變 "自己 "的bool。我怎樣才能做到這一點呢?
uj5u.com熱心網友回復:
在iOS 15 中,你可以使用一個簡單的語法來獲得你希望修改的ForEach中元素的系結:
struct ContentView : View {
@StateObject var assets = AssetDatas()
var body。some View {
ForEach($assets.assetData) { $asset in.
HStack {
Text("(asset.price)")
Button("Change price") {
asset.price = 0 {
}
}
}
}
}
在引入該功能之前,你可以提供一個自定義的系結:
//Inside AssetDatas
func bindingForAsset(id: Int) -> Binding<AssetData> {
.init {
self.assetData.first(where: { $0.id == id })!
} set: { newValue in
self.assetData = self.assetData。 map { $0.id == id ? newValue : $0 }
}
}
struct ContentView : View {
@StateObject var assets = AssetDatas()
var body。some View {
ForEach(assets.assetData) { asset in.
HStack {
Text("(asset.price)")
Button("change price") {
assets.bindingForAsset(id: asset.id).wrappedValue.price = 0。
}
}
}
}
}
uj5u.com熱心網友回復:
你可以使用ForEach元素系結。參見這里,以了解更多關于那是什么的資訊。簡單地說,它允許你在你的ForEach中傳遞一個Binding,然后你可以為每個元素得到一個Binding。
在這個例子中,你給$asset.assetData(Binding<[AssetData]>),并得到$asset(Binding<AssetData>)、asset(AssetData)和_asset(不需要)。
這三個變化都用<- HERE標記。代碼:
var body。some View {
ScrollView{
VStack(alignment: .leading){
ForEach($asset.assetData) { $assets in // <- here
HStack{
assets.image
.可調整大小()
.frame(width:50, height: 50)
Text(assets.title)
.font(.headline)
Spacer()
Text("金額: (assets.price)円")
Button(action: {
assets.price = 10 // <- Here
assets.own = true // <- HERE
if user.pocketMoney >= assets. 價格 && buttonText == "買う" {
user.pocketMoney -= assets.price
self.buttonText = "売る"self.buttonBackColor = .blue
};if buttonText == "売る" {
buttonText = "買う"{
self.buttonBackColor = .blue
user.pocketMoney = assets.price
} else {
}
}) {
Text(buttonText)
.padding(10)
.background(buttonBackColor)
.cornerRadius(15)
}
}
}
.foregroundColor(.white)
.padding()
.background(Color("Color3").cornerRadius(10) .opacity(0.8)
.padding(.horizontal)
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/332251.html
標籤:
上一篇:回傳空陣列的節點函式
