Random 如何使用同一随机生成的数字两次?-迅捷

Random 如何使用同一随机生成的数字两次?-迅捷,random,swiftui,Random,Swiftui,我正在尝试构建一个非常简单的乘法练习应用程序,用户选择他们想要练习的乘法表,该应用程序使用1到20之间随机生成的整数在该表上提出乘法问题。然后我想给用户一个答案 我遇到的问题是,随机生成的数字在显示问题的代码和显示答案的代码之间发生了变化。我肯定有一个简单的解决办法,但我没有看到 如何存储随机生成的数字,以便在代码中的两个位置使用?或者,我如何有选择地阻止随机化的发生 以下是我当前的代码: struct test: View { @State private var multipl

我正在尝试构建一个非常简单的乘法练习应用程序,用户选择他们想要练习的乘法表,该应用程序使用1到20之间随机生成的整数在该表上提出乘法问题。然后我想给用户一个答案

我遇到的问题是,随机生成的数字在显示问题的代码和显示答案的代码之间发生了变化。我肯定有一个简单的解决办法,但我没有看到

如何存储随机生成的数字,以便在代码中的两个位置使用?或者,我如何有选择地阻止随机化的发生

以下是我当前的代码:

    struct test: View {

  @State private var multiplicationTable = 1

  var body: some View {
    VStack {
      Spacer()
      Text("Pick the multiplication table you'd like to practice!")
        .bold()
        .fontWeight(.bold)
        .font(.title)

        .multilineTextAlignment(.center)
      Stepper(value: $multiplicationTable, in: 1...12, step: 1) {
        Text("\(multiplicationTable)'s")
      }
      Text("Let's go!")
      Spacer()
      Text("Question #1: \(numberForText(multiplier1: multiplicationTable).text1)")
      Text("Answer: \(numberForText(multiplier1: multiplicationTable).text2)")
      Spacer()
    }
    .padding(.leading, 20)
    .padding(.trailing, 20)
  }

  func numberForText(multiplier1: Int) -> (text1: String, text2: String) {
    let multiplier2 = Int.random(in: 1..<21)
    return ("What is \(multiplier1) times \(multiplier2)?", "\(multiplier1) times \(multiplier2) = \(multiplier1 * multiplier2)")
  }
}
struct测试:视图{
@国家私有var乘法表=1
var body:一些观点{
VStack{
垫片()
文本(“选择你想练习的乘法表!”)
.bold()
.fontWeight(.粗体)
.font(.title)
.multilitextalignment(.center)
步进器(值:$乘法表,输入:1…12,步骤:1){
文本(“\(乘法表)”
}
文本(“我们走吧!”)
垫片()
文本(“问题1:\(numberfortex(乘数1:multiplicationTable.text1)”)
文本(“答案:\(numberfortex(乘数1:multiplicationTable.text2)”)
垫片()
}
.padding(.leading,20)
.padding(.training,20)
}
func numberfortex(multipler1:Int)->(text1:String,text2:String){

让multipler2=Int.random(in:1..您只需要存储生成的成对问题答案。请找到以下可能的方法:

struct test: View {

  @State private var multiplicationTable = 1

    @State private var excesize: (text1: String, text2: String) = ("", "")
  var body: some View {
    VStack {
      Spacer()
      Text("Pick the multiplication table you'd like to practice!")
        .bold()
        .fontWeight(.bold)
        .font(.title)

        .multilineTextAlignment(.center)
      Stepper(value: $multiplicationTable, in: 1...12, step: 1) {
        Text("\(multiplicationTable)'s")
      }
      Text("Let's go!")
      Spacer()
      Text("Question #1: \(excesize.text1)")
      Text("Answer: \(excesize.text2)")
      Spacer()
        Button("Next turn") { self.generateNext() }
    }
    .padding(.leading, 20)
    .padding(.trailing, 20)
  }

    func generateNext() {
        self.excesize = numberForText(multiplier1: multiplicationTable)
    }

  func numberForText(multiplier1: Int) -> (text1: String, text2: String) {
    let multiplier2 = Int.random(in: 1..<21)
    return ("What is \(multiplier1) times \(multiplier2)?", "\(multiplier1) times \(multiplier2) = \(multiplier1 * multiplier2)")
  }
}
struct测试:视图{
@国家私有var乘法表=1
@国家私有变量excesize:(text1:String,text2:String)=(“”,“”)
var body:一些观点{
VStack{
垫片()
文本(“选择你想练习的乘法表!”)
.bold()
.fontWeight(.粗体)
.font(.title)
.multilitextalignment(.center)
步进器(值:$乘法表,输入:1…12,步骤:1){
文本(“\(乘法表)”
}
文本(“我们走吧!”)
垫片()
文本(“问题1:\(excesize.text1)”)
文本(“答案:\(excesize.text2)”)
垫片()
按钮(“下一轮”){self.generateNext()}
}
.padding(.leading,20)
.padding(.training,20)
}
func generateNext(){
self.excesize=numberForText(乘法器1:乘法表)
}
func numberfortex(multipler1:Int)->(text1:String,text2:String){

让multipler2=Int.random(in:1..您只需要存储生成的成对问题答案。请找到以下可能的方法:

struct test: View {

  @State private var multiplicationTable = 1

    @State private var excesize: (text1: String, text2: String) = ("", "")
  var body: some View {
    VStack {
      Spacer()
      Text("Pick the multiplication table you'd like to practice!")
        .bold()
        .fontWeight(.bold)
        .font(.title)

        .multilineTextAlignment(.center)
      Stepper(value: $multiplicationTable, in: 1...12, step: 1) {
        Text("\(multiplicationTable)'s")
      }
      Text("Let's go!")
      Spacer()
      Text("Question #1: \(excesize.text1)")
      Text("Answer: \(excesize.text2)")
      Spacer()
        Button("Next turn") { self.generateNext() }
    }
    .padding(.leading, 20)
    .padding(.trailing, 20)
  }

    func generateNext() {
        self.excesize = numberForText(multiplier1: multiplicationTable)
    }

  func numberForText(multiplier1: Int) -> (text1: String, text2: String) {
    let multiplier2 = Int.random(in: 1..<21)
    return ("What is \(multiplier1) times \(multiplier2)?", "\(multiplier1) times \(multiplier2) = \(multiplier1 * multiplier2)")
  }
}
struct测试:视图{
@国家私有var乘法表=1
@国家私有变量excesize:(text1:String,text2:String)=(“”,“”)
var body:一些观点{
VStack{
垫片()
文本(“选择你想练习的乘法表!”)
.bold()
.fontWeight(.粗体)
.font(.title)
.multilitextalignment(.center)
步进器(值:$乘法表,输入:1…12,步骤:1){
文本(“\(乘法表)”
}
文本(“我们走吧!”)
垫片()
文本(“问题1:\(excesize.text1)”)
文本(“答案:\(excesize.text2)”)
垫片()
按钮(“下一轮”){self.generateNext()}
}
.padding(.leading,20)
.padding(.training,20)
}
func generateNext(){
self.excesize=numberForText(乘法器1:乘法表)
}
func numberfortex(multipler1:Int)->(text1:String,text2:String){

让multipler2=Int.random(in:1..您只需要从
numberfortex
方法中获取一次数据。然后将返回的元组存储到属性中。就是这样

struct test: View {

    @State private var multiplicationTable = 1

    @State private var generatedTuple: (text1: String, text2: String) = ("", "")

    var body: some View {
        VStack {
            Spacer()
            Text("Pick the multiplication table you'd like to practice!")
                .bold()
                .fontWeight(.bold)
                .font(.title)
                .multilineTextAlignment(.center)

            Stepper(value: $multiplicationTable, in: 1...12, step: 1, onEditingChanged: { (didChange) in
                self.generatedTuple = self.numberForText(multiplier1: self.multiplicationTable)
            }) {
                Text("\(multiplicationTable)'s")
            }

            Text("Let's go!")
            Spacer()

            Text("Question #1: \(self.generatedTuple.text1)")
            Text("Answer: \(self.generatedTuple.text2)")

            Spacer()
        }
        .padding(.leading, 20)
        .padding(.trailing, 20)
    }

    func numberForText(multiplier1: Int) -> (text1: String, text2: String) {
        let multiplier2 = Int.random(in: 1..<21)
        return ("What is \(multiplier1) times \(multiplier2)?", "\(multiplier1) times \(multiplier2) = \(multiplier1 * multiplier2)")
    }
}
struct测试:视图{
@国家私有var乘法表=1
@State-private变量generatedTuple:(text1:String,text2:String)=(“”,“”)
var body:一些观点{
VStack{
垫片()
文本(“选择你想练习的乘法表!”)
.bold()
.fontWeight(.粗体)
.font(.title)
.multilitextalignment(.center)
步进器(值:$multiplicationTable,in:1…12,step:1,onEditingChanged:{(didChange)in
self.generatedTuple=self.numberfortex(乘数1:self.乘法表)
}) {
文本(“\(乘法表)”
}
文本(“我们走吧!”)
垫片()
文本(“问题1:\(self.generatedTuple.text1)”)
文本(“答案:\(self.generatedTuple.text2)”)
垫片()
}
.padding(.leading,20)
.padding(.training,20)
}
func numberfortex(multipler1:Int)->(text1:String,text2:String){

让multipler2=Int.random(in:1..您只需要从
numberfortex
方法中获取一次数据。然后将返回的元组存储到属性中。就是这样

struct test: View {

    @State private var multiplicationTable = 1

    @State private var generatedTuple: (text1: String, text2: String) = ("", "")

    var body: some View {
        VStack {
            Spacer()
            Text("Pick the multiplication table you'd like to practice!")
                .bold()
                .fontWeight(.bold)
                .font(.title)
                .multilineTextAlignment(.center)

            Stepper(value: $multiplicationTable, in: 1...12, step: 1, onEditingChanged: { (didChange) in
                self.generatedTuple = self.numberForText(multiplier1: self.multiplicationTable)
            }) {
                Text("\(multiplicationTable)'s")
            }

            Text("Let's go!")
            Spacer()

            Text("Question #1: \(self.generatedTuple.text1)")
            Text("Answer: \(self.generatedTuple.text2)")

            Spacer()
        }
        .padding(.leading, 20)
        .padding(.trailing, 20)
    }

    func numberForText(multiplier1: Int) -> (text1: String, text2: String) {
        let multiplier2 = Int.random(in: 1..<21)
        return ("What is \(multiplier1) times \(multiplier2)?", "\(multiplier1) times \(multiplier2) = \(multiplier1 * multiplier2)")
    }
}
struct测试:视图{
@国家私有var乘法表=1
@State-private变量generatedTuple:(text1:String,text2:String)=(“”,“”)
var body:一些观点{
VStack{
垫片()
文本(“选择你想练习的乘法表!”)
.bold()
.fontWeight(.粗体)
.font(.title)
.multilitextalignment(.center)
步进器(值:$multiplicationTable,in:1…12,step:1,onEditingChanged:{(didChange)in
self.generatedTuple=self.numberfortex(乘数1:self.乘法表)
}) {
文本(“\(乘法表)”
}
文本(“我们走吧!”)
垫片()
文本(“问题1:\(self.generatedTuple.text1)”)
文本(“答案:\(self.generatedTuple.text2)”)
垫片()