随机化名称按钮仅适用一次

时间:2018-02-13 21:26:13

标签: swift

我在Swift中构建一个随机的名称生成器应用程序,以获得乐趣。

为此,我创建了两个数组;一个带有潜在名字的列表,一个带有潜在姓氏的列表。

// Array example:

let firstName: [String] = ["first", "name", "etc",]

let lastName: [Sting] = ["last","name", "etc"]


// Then implemented a randomizing mechanism with arc4random_uniform then 

lazy var randomFirst = Int(arc4random_uniform(UInt32(firstName.count)))

lazy var randomLast = Int(arc4random_uniform(UInt32(lastName.count)))


// I then have a button which updated a textfield with the new names:

@IBOutlet weak var NameLabel: UILabel!

@IBAction func getName(_ sender: Any) { 
      NameLabel.text = firstName[randomFirst] + lastName[randomLast]    
}

我遇到的问题是按钮只能工作一次。 onClick,它会更新为一个新的随机名称,但不会随后进行任何点击 据我所知,该按钮只需要一次调用.count,并且在按下其他按钮时不会/不会/不能这样做?

我试图制作它,以便在每次点击按钮时生成一个新名称。

任何想法?

2 个答案:

答案 0 :(得分:0)

每次按钮事件触发时,都应该为名称生成随机索引。如下所示:

@IBAction func getName(_ sender: Any) {

      // GENERATE INDEXES
      var randomFirst = Int(arc4random_uniform(UInt32(firstName.count)))
      var randomLast = Int(arc4random_uniform(UInt32(lastName.count)))

      // SET NAME LABEL
      NameLabel.text = firstName[randomFirst] + lastName[randomLast]    
}

原因是lazy运算符。正如您所设置的那样,使用lazy运算符实例化的变量将在第一次调用时使用随机数初始化自身。每次在它之后引用它将加载其最后加载的值。

答案 1 :(得分:0)

lazy表示变量的值只计算一次,然后像常量一样使用。您必须改为使用计算变量:

var randomFirst { 
    return Int(arc4random_uniform(UInt32(firstName.count)))
}

var randomLast {
    return Int(arc4random_uniform(UInt32(lastName.count)))
}