[英]Show random TextField as a text
我想制作按钮,按下该按钮将向我们显示随机文本字段(来自 3 个文本字段:用户名、用户名 2 或用户名 3)。 目前我有这样的东西,但不知道如何让它成为可能。
struct Test: View {
/// @State private var names : ??? - I don't know what should be there
@State private var username: String = ""
@State var username2: String = ""
@State var username3: String = ""
var body: some View {
NavigationView {
VStack {
TextField("Your name", text: $username)
TextField("Your name2", text: $username2)
TextField("Your name3", text: $username3)
Button(action: randomName) {
Text("draw")
}
}
Text("names.text") /// it doesn't work
.foregroundColor(.black)
.font(.largeTitle)
}
}
}
private func randomName() {
let names = ["\(username)", "\(username2)", "\(username3)"]
}
}
我试图将所有内容添加到第一个 @State 私有 var 名称中,但没有任何工作正常。 也许我只是以错误的方式尝试? 或者它不应该通过'let names'来完成? 我不知道,也不知道。
首先,您只需要将 randomName 添加为 State。
struct Example: View {
@State private var username: String = ""
@State var username2: String = ""
@State var username3: String = ""
@State var selectedName: String = "Initial Value"
var body: some View {
NavigationView {
VStack {
TextField("Your name", text: $username)
TextField("Your name2", text: $username2)
TextField("Your name3", text: $username3)
Button(action: randomName) {
Text("draw")
}
Text(selectedName)
.foregroundColor(.black)
.font(.largeTitle)
}
}
}
private func randomName() {
let names = ["\(username)", "\(username2)", "\(username3)"]
selectedName = names[Int.random(in: 0..<names.count)]
}
}
username
、 username2
和username3
属性已经是字符串。 创建数组时无需使用字符串插值。
Swift arrays 有一个方便的randomElement()
方法。 唯一的问题是它返回一个可选的——如果数组为空,它将返回nil
,所以你需要处理这个。 有以下三种方式:
nil
,您可以使用if let
跳过代码nil
,您可以使用 nil-coalescing 运算符 ( ??
) 提供默认值!
. 这通常不是一个好方法,尽管在这种情况下它可以工作,因为数组不能为空。选项1:
private func randomName() {
let names = [username, username2, username3]
if let randomName = names.randomElement() {
selectedName = randomName
}
}
选项 2:
private func randomName() {
let names = [username, username2, username3]
selectedName = names.randomElement() ?? ""
}
选项 3:
private func randomName() {
let names = [username, username2, username3]
selectedName = names.randomElement()!
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.