我在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,并且在按下其他按钮时不会/不会/不能这样做?
我试图制作它,以便在每次点击按钮时生成一个新名称。
任何想法?
答案 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)))
}