簡體   English   中英

將隨機 TextField 顯示為文本

[英]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)]
        }
}

usernameusername2username3屬性已經是字符串。 創建數組時無需使用字符串插值。

Swift arrays 有一個方便的randomElement()方法。 唯一的問題是它返回一個可選的——如果數組為空,它將返回nil ,所以你需要處理這個。 有以下三種方式:

  1. 如果結果為nil ,您可以使用if let跳過代碼
  2. 如果結果為nil ,您可以使用 nil-coalescing 運算符 ( ?? ) 提供默認值
  3. 您可以使用! . 這通常不是一個好方法,盡管在這種情況下它可以工作,因為數組不能為空。

選項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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM