i have MainContentView &
ContentView1 & ContentView2 & ContentView3 & ContentView4 & ContentView5
i use random number between 1 and 5 and its work fine
but same time the random number in all view be same number
https://i.ibb.co/8gWQSFm/Screen-Shot-2019-11-27-at-1-02-24-AM.png
i want unique number in every view
my code
import SwiftUI
struct MainContentView: View {
var body: some View {
VStack {
ContentView1()
ContentView2()
ContentView3()
ContentView4()
ContentView5()
}
}
}
struct ContentView1: View {
@State var randomNumber: Int = Int.random(in: 1...5)
var body: some View {
VStack {
Text("randomNumber \(randomNumber)")
}
}
}
struct ContentView2: View {
@State var randomNumber: Int = Int.random(in: 1...5)
var body: some View {
VStack {
Text("randomNumber \(randomNumber)")
}
}
}
struct ContentView3: View {
@State var randomNumber: Int = Int.random(in: 1...5)
var body: some View {
VStack {
Text("randomNumber \(randomNumber)")
}
}
}
struct ContentView4: View {
@State var randomNumber: Int = Int.random(in: 1...5)
var body: some View {
VStack {
Text("randomNumber \(randomNumber)")
}
}
}
struct ContentView5: View {
@State var randomNumber: Int = Int.random(in: 1...5)
var body: some View {
VStack {
Text("randomNumber \(randomNumber)")
}
}
}
thank you
Add a shuffled array as a property to your main view
struct MainContentView: View {
let randomNumbers = Array(1...5).shuffled()
Add a property to your sub-views to hold an Int
struct ContentView1: View {
var randomNumber: Int
Now use values from the shuffled array when construction your views
VStack {
ContentView1(randomNumber: randomNumbers[0])
ContentView2(randomNumber: randomNumbers[1])
ContentView3(randomNumber: randomNumbers[2])
ContentView4(randomNumber: randomNumbers[3])
ContentView5(randomNumber: randomNumbers[4])
}
As far as I understood it needs two mutually exclusive values based on one random selection. If so then those one selection must be outside of value consumers.
Taking above into account here is possible demo approach. The idea is to wrap random selector in dedicated value, so whenever it is created the new randomly selected pair is generated. Hope it would be helpful.
struct RandomPair {
private let value: Int = Int.random(in: 1...2)
var first: Int { value }
var second: Int { value == 1 ? 2 : 1 }
}
struct MainContentView: View {
@State var randomValue = RandomPair()
var body: some View {
VStack {
ContentView1(randomNumber: $randomValue)
ContentView2(randomNumber: $randomValue)
}
}
}
struct ContentView1: View {
@Binding var randomNumber: RandomPair
var body: some View {
VStack {
Text("randomNumber \(randomNumber.first)")
}
}
}
struct ContentView2: View {
@Binding var randomNumber: RandomPair
var body: some View {
VStack {
Text("randomNumber \(randomNumber.second)")
}
}
}
struct DemoRandomPair_Previews: PreviewProvider {
static var previews: some View {
VStack {
ForEach(0..<5, id: \.self) { _ in
VStack {
MainContentView()
Divider()
}
}
}
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.