Swift 迅捷随机元素

Swift 迅捷随机元素,swift,swiftui,swift5,Swift,Swiftui,Swift5,我在办公室里按照指示做了 举个例子 let names = ["Zoey", "Chloe", "Amani", "Amaia"] let randomName = names.randomElement()! // randomName == "Amani" 这不起作用,因为randomName未初始化,所以我尝试了一种解决方法: let words = [ "anbi

我在办公室里按照指示做了 举个例子

let names = ["Zoey", "Chloe", "Amani", "Amaia"]
let randomName = names.randomElement()!
// randomName == "Amani"
这不起作用,因为randomName未初始化,所以我尝试了一种解决方法:

   let words = [
    "anbieten","anbietend","angeboten"]

 var  random : String { words.randomElement()!}
为了给出一些上下文,我将这个随机变量用于一个游戏,该游戏应该显示相同的单词3次,因此我需要能够确保“random”的值包含数组中的一个随机单词,但始终是相同的随机单词

不幸的是,当我在SwiftUI中使用变量时

  NavigationLink(destination: ResultView(choice: "Arial")) {
                    Text("\(random)").font(.custom("Arial", size: 60))
                }
                
                NavigationLink(destination: ResultView(choice: "San Francisco")) {
                    Text("\(random)").font(.system(size: 60))
                }
它显然显示了数组的两个不同元素

我确实试着把我在苹果开发者网站上的“随机”改成“出租”

let  random : String { words.randomElement()!}
但这又回来了

 let' declarations cannot be computed properties

你不能让它成为一个计算属性,因为,正如你所看到的,它是不一致的。您想要的是一个常量(即,
),但正如您所看到的,您不可能拥有一个常量计算属性(如果您仔细想想,对于“每次都相同”[constant]和“每次都重新计算”[computed property])。相反,您希望做的基本上与您在第一个代码清单中所做的相同:

let names=[“Zoey”、“Chloe”、“Amani”、“Amaia”]
让randomName=names.randomElement()!
您说这不起作用,因为
randomName
没有初始化。我想你是在这种情况下尝试的:

struct MyView:View{
让名字=[“Zoey”、“Chloe”、“Amani”、“Amaia”]
让randomName=names.randomElement()!
var body:一些观点{
MyOtherView()
}
}
但它不起作用。要解决这个问题,只需定义一个初始值设定项,如下所示:(您也可以向初始值设定项添加任何其他需要的参数)

struct MyView:View{
让名字=[“Zoey”、“Chloe”、“Amani”、“Amaia”]
让随机名称:String
init(){
self.randomName=names.randomElement()!
}
var body:一些观点{
MyOtherView()
}
}

注意:如果您有任何要传递到此视图的
@Binding
变量,您可能会对如何将它们包含在初始值设定项中感到困惑,因此下面是一个简单的示例:

struct SuperView:View{
@状态变量文本:String=“”
var body:一些观点{
子视图(文本:self.$text)
}
}
结构子视图:视图{
@绑定变量文本:字符串
让名字=[“Zoey”、“Chloe”、“Amani”、“Amaia”]
让随机名称:String
init(文本:绑定){
self.\u text=text//这将访问原始绑定变量,允许您使用传递的值
self.randomName=names.randomElement()!
}
var body:一些观点{
SomeOtherView()
}
}

您不能让它成为计算属性,因为正如您所看到的,它不一致。您想要的是一个常量(即,
),但正如您所看到的,您不可能拥有一个常量计算属性(如果您仔细想想,对于“每次都相同”[constant]和“每次都重新计算”[computed property])。相反,您希望做的基本上与您在第一个代码清单中所做的相同:

let names=[“Zoey”、“Chloe”、“Amani”、“Amaia”]
让randomName=names.randomElement()!
您说这不起作用,因为
randomName
没有初始化。我想你是在这种情况下尝试的:

struct MyView:View{
让名字=[“Zoey”、“Chloe”、“Amani”、“Amaia”]
让randomName=names.randomElement()!
var body:一些观点{
MyOtherView()
}
}
但它不起作用。要解决这个问题,只需定义一个初始值设定项,如下所示:(您也可以向初始值设定项添加任何其他需要的参数)

struct MyView:View{
让名字=[“Zoey”、“Chloe”、“Amani”、“Amaia”]
让随机名称:String
init(){
self.randomName=names.randomElement()!
}
var body:一些观点{
MyOtherView()
}
}

注意:如果您有任何要传递到此视图的
@Binding
变量,您可能会对如何将它们包含在初始值设定项中感到困惑,因此下面是一个简单的示例:

struct SuperView:View{
@状态变量文本:String=“”
var body:一些观点{
子视图(文本:self.$text)
}
}
结构子视图:视图{
@绑定变量文本:字符串
让名字=[“Zoey”、“Chloe”、“Amani”、“Amaia”]
让随机名称:String
init(文本:绑定){
self.\u text=text//这将访问原始绑定变量,允许您使用传递的值
self.randomName=names.randomElement()!
}
var body:一些观点{
SomeOtherView()
}
}