简体   繁体   English

将随机 TextField 显示为文本

[英]Show random TextField as a text

I want to make button, which pressed will show us random textfield (from 3 textfields: username, username2 or username3).我想制作按钮,按下该按钮将向我们显示随机文本字段(来自 3 个文本字段:用户名、用户名 2 或用户名 3)。 Currently I have something like this, but don't know how to make it possible.目前我有这样的东西,但不知道如何让它成为可能。

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)"]
    }
}

I have tried to add everything into first @State private var names, but nothing work properly.我试图将所有内容添加到第一个 @State 私有 var 名称中,但没有任何工作正常。 Maybe I am just trying in wrong way?也许我只是以错误的方式尝试? Or it shouldn't be done by 'let names'?或者它不应该通过'let names'来完成? I don't know and have no idea.我不知道,也不知道。

first of all you just need to add randomName as State.首先,您只需要将 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)]
        }
}

The username , username2 and username3 properties are already strings. usernameusername2username3属性已经是字符串。 No need to use string interpolation when you create your array.创建数组时无需使用字符串插值。

Swift arrays have a handy randomElement() method. Swift arrays 有一个方便的randomElement()方法。 The only wrinkle is that it returns an optional - It will return nil if the array is empty, so you need to handle this.唯一的问题是它返回一个可选的——如果数组为空,它将返回nil ,所以你需要处理这个。 There are three ways:有以下三种方式:

  1. You can use an if let to skip the code if the result is nil如果结果为nil ,您可以使用if let跳过代码
  2. You can use the nil-coalescing operator ( ?? ) to provide a default value if the result is nil如果结果为nil ,您可以使用 nil-coalescing 运算符 ( ?? ) 提供默认值
  3. You can force unwrap using !您可以使用! . . This is generally not a good approach, although it could work in this case because the array cannot be empty.这通常不是一个好方法,尽管在这种情况下它可以工作,因为数组不能为空。

Option 1:选项1:

private func randomName() {
   let names = [username, username2, username3]
   if let randomName = names.randomElement() {
       selectedName = randomName
   }
}

Option 2:选项 2:

private func randomName() {
   let names = [username, username2, username3]
   selectedName = names.randomElement() ?? ""
}

Option 3:选项 3:

private func randomName() {
   let names = [username, username2, username3]
   selectedName = names.randomElement()!
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM