SWIFTUI-如何更改数组中随机变量的值?
我正在尝试用SwiftUI构建一个简单的打鼹鼠游戏。在下面的代码中,我想做的是,每当第二个计时器倒计时时,resimler数组的一个成员(由resim1..resim9组成)将更改为具有值mavis,该值是库中图像的名称 当我使用printresimler时,我可以从输出中看到该数组中的一个随机元素的值为mavis,没有问题。但人体内的相关图像并不显示模拟器中的图像 例如: [,mavis,,,,,] 我在结果中看到该日志,但Imageresim2没有显示该图像 如何让它显示图像 谢谢SWIFTUI-如何更改数组中随机变量的值?,swiftui,Swiftui,我正在尝试用SwiftUI构建一个简单的打鼹鼠游戏。在下面的代码中,我想做的是,每当第二个计时器倒计时时,resimler数组的一个成员(由resim1..resim9组成)将更改为具有值mavis,该值是库中图像的名称 当我使用printresimler时,我可以从输出中看到该数组中的一个随机元素的值为mavis,没有问题。但人体内的相关图像并不显示模拟器中的图像 例如: [,mavis,,,,,] 我在结果中看到该日志,但Imageresim2没有显示该图像 如何让它显示图像 谢谢 stru
struct level1: View {
@State var resim1 = ""
@State var resim2 = ""
@State var resim3 = ""
@State var resim4 = ""
@State var resim5 = ""
@State var resim6 = ""
@State var resim7 = ""
@State var resim8 = ""
@State var resim9 = ""
@State var timecounter = 5
var timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
func findMavis() {
var resimler = [self.resim1 , self.resim2 , self.resim3 , self.resim4 , self.resim5 , self.resim6 , self.resim7 , self.resim8 , self.resim9 ]
let randomResim = Int(arc4random_uniform(UInt32(resimler.count - 1)))
resimler[randomResim] = "mavis"
}
var body: some View {
VStack {
Text("\(timecounter) seconds remaining").padding(.bottom, 50).onReceive(timer) { input in self.timecounter -= 1
// the functions in this area will work every second
self.findMavis()
// the functions after this will work after the timer stops
if self.timecounter == 0 {
self.timer.upstream.connect().cancel()
}
}
HStack {
Image(resim1).resizable()
.frame(width: 100.0, height: 100.0).cornerRadius(50).onTapGesture {
if self.resim1 == "mavis" {
self.scoreUp() }
}
Image(resim2).resizable()
.frame(width: 100.0, height: 100.0).cornerRadius(50).onTapGesture {
if self.resim2 == "mavis" {
self.scoreUp() }
}
Image(resim3).resizable()
.frame(width: 100.0, height: 100.0).cornerRadius(50).onTapGesture {
if self.resim3 == "mavis" {
self.scoreUp() }
}
}
HStack {
Image(resim4).resizable()
.frame(width: 100.0, height: 100.0).cornerRadius(50).onTapGesture {
if self.resim4 == "mavis" {
self.scoreUp() }
}
Image(resim5).resizable()
.frame(width: 100.0, height: 100.0).cornerRadius(50).onTapGesture {
if self.resim5 == "mavis" {
self.scoreUp() }
}
Image(resim6).resizable()
.frame(width: 100.0, height: 100.0).cornerRadius(50).onTapGesture {
if self.resim6 == "mavis" {
self.scoreUp() }
}
}
HStack {
Image(resim7).resizable()
.frame(width: 100.0, height: 100.0).cornerRadius(50).onTapGesture {
if self.resim7 == "mavis" {
self.scoreUp() }
}
Image(resim8).resizable()
.frame(width: 100.0, height: 100.0).cornerRadius(50).onTapGesture {
if self.resim8 == "mavis" {
self.scoreUp() }
}
Image(resim9).resizable()
.frame(width: 100.0, height: 100.0).cornerRadius(50).onTapGesture {
if self.resim9 == "mavis" {
self.scoreUp() }
}
}
}
}
}
也许你应该阅读Swift初学者教程,如何分配变量 据此:
var resimler = [self.resim1 , self.resim2 , self.resim3 , self.resim4 , self.resim5 , self.resim6 , self.resim7 , self.resim8 , self.resim9 ]
let randomResim = Int(arc4random_uniform(UInt32(resimler.count - 1)))
resimler[randomResim] = "mavis" // this line is your error
在我指出错误的这一行,您不需要更改self.resim1-9
您可以将数组更改为@State变量,并直接更改数组中的值,然后在图像中使用这些值,如:Imageresilmer[0]等等
试试这个:虽然我不知道你想做什么…但是代码是有效的,不喜欢意大利面条
struct ContentView: View {
@State var timecounter = 5
@State var score = 0
var timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
func scoreUp() {
score = score + 1
}
@State var resimler : [String] = ["","","","","","","","",""]
func findMavis() {
let randomResim = Int(arc4random_uniform(UInt32(resimler.count - 1)))
self.resimler[randomResim] = "circle.fill"
}
var body: some View {
VStack {
Text("Score: \(score)")
.font(Font.largeTitle)
Text("\(timecounter) seconds remaining").padding(.bottom, 50).onReceive(timer) { input in self.timecounter -= 1
// the functions in this area will work every second
self.findMavis()
// the functions after this will work after the timer stops
if self.timecounter == 0 {
self.timer.upstream.connect().cancel()
}
}
ForEach (0..<9) {index in
Image(systemName:self.resimler[index]).resizable()
.frame(width: 100.0, height: 100.0).cornerRadius(50).onTapGesture {
if self.resimler[index] == "circle.fill" {
self.scoreUp() }
}
}
}
}
}
是的,我明白了。当我按自己的方式做时,我不改变变量,我只是改变数组中的值。你的没有给我我想要的,但至少我会停止在错误的道路上浪费更多的时间,谢谢!