Ios 可选类型的值';UITextField&x27;必须展开以引用成员';文本';包装底座类型';UITextField';

Ios 可选类型的值';UITextField&x27;必须展开以引用成员';文本';包装底座类型';UITextField';,ios,swift,Ios,Swift,我使用一个文本字段来搜索数组中的值。但我遇到了这样的错误。 我们应该如何转换数据类型?我用的是Swift 5 可选类型“UITextField”的值必须展开才能引用已包装基类型“UITextField”的成员“text” for i in 0..<allUser.count { if allUser[i].name.contains(textArea.text) { // here is the error print(allUser[i].

我使用一个文本字段来搜索数组中的值。但我遇到了这样的错误。 我们应该如何转换数据类型?我用的是Swift 5

可选类型“UITextField”的值必须展开才能引用已包装基类型“UITextField”的成员“text”

    for i in 0..<allUser.count {
        if allUser[i].name.contains(textArea.text) { // here is the error
            print(allUser[i].name)
        }
    }

对于0中的i..您应该使用
if let
语句安全地打开文本

for i in 0..<allUser.count{
    if let textValue = textArea.text {
        if allUser[i].name.contains(textValue){
            print(allUser[i].name)
        }
    }
}

对于0中的i..您得到的错误是因为textArea是可选的,textArea.text返回可选字符串,“contains”函数需要非可选字符串

首先,展开文本,然后循环过滤匹配项并打印它们

if let text = textArea?.text {
   for user in allUser.filter({ $0.name.contains(text) }) {
      print(user.name)
   }
}

错误与文本字段有关,而与
文本属性无关

你甚至可以写

if let textField = textArea {
   let text = textField.text!
   for user in allUser where user.name.contains(text) {
      print(user.name)
   }
}
因为
UITextField
text
属性不会是
nil
,但是在这种情况下这是最好的

if let text = textArea?.text {
   for user in allUser where user.name.contains(text) {
      print(user.name)
   }
}

我建议您在循环
if let text=textArea?.text{
之前打开对象,并在
if
语句中使用
text