2017-01-18 44 views
0

因此,在swift 3中,我只想循環訪問textField outlet集合,如果textField.text =「」,然後做一些事情。我做了以下,但我相信應該有一個更優雅的解決方案,其中我不必使用數組來檢查空的文本字段,但直接從文本字段集合中檢查它。在textField集合中查找空的textField

@IBOutlet var playerNamesCollection: [UITextField]! 

    //add names to an array 
    var namesArray = [String]() 

    for i in 0...8 { 

     namesArray.append(playerNamesCollection[i].text!) 
    } 

    //and then verify that array 
    for i in 0...8 { 

     if namesArray.contains("") { 

      print("missing a name") 

     } else { 

      print("all textFieldsFilled") 
     } 

回答

2

你可以過濾掉空字段:

let emptyFields = playerNamesCollection.filtered { $0.text != nil && $0.text == "" } 

或改變他們在的地方:

var namesArray = [String]() 

namesArray = ["Pierre", "Jean", "", "Michel"] 

for name in namesArray { 
    if name.isEmpty { 
     print("Empty name") 
    } 
    else { 
     print("\(name)") 
    } 
} 

let result = playerNamesCollection.map { (textField: UITextField) -> UITextField in 
    if let text = textField.text, text == "" { 
     // textField.text is "". Do whatever you need to do with it 
     textField.text! = "Edited empty text" 
    } 

    return textField 
} 
2

只是循環您的陣列這樣的輸出

"Pierre" 
"Jean" 
"Empty name" 
"Michel" 
1

包含是正確的,如果你想知道是否有任何字符串是空的,但你不在乎哪一個(包含停在它找到的第一個實例)。你不需要把它放在for循環中。

如果你想知道每個空字符串使用列舉的指數()。flatMap

var namesArray = ["a","b", "", "c", "", "d"] 
let emptyIndices = namesArray.enumerated().flatMap { $0.element.isEmpty ? $0.offset : nil } 
print(emptyIndices) // [2, 4]