2016-05-09 4 views
-5

Как узнать, существует ли определенная строка в массиве? Я хочу сделать что-то вроде этого:Проверка строки в массиве

if (getUsuarios().containsString(usuarioView.text!) == false) { 

    print("hola") 

    alerta("Ups, vas a tener que cambiar algo", texto2: "Ese usuario ya existe", alertaNum: "refreshAlert6") 

    usuarioView.text = "" 


} 

getUsuarios это:

func getUsuarios() -> String { 
    var usuariosDataBase = [String]() 

    Alamofire.request(.GET, url) 
     .responseJSON { response in 
      print(response) 


      do { 
       let json = try NSJSONSerialization.JSONObjectWithData(response.data!, options: .AllowFragments) 

       if let blogs = json as? [[String: AnyObject]] { 
        for blog in blogs { 
         if let usuario = blog["usuario"] as? String { 
          usuariosDataBase.append(usuario) 
         } 
        } 
       } 
      } catch { 
       print("error serializing JSON: \(error)") 
      } 

      print(usuariosDataBase) 


    } 

    return "\(usuariosDataBase)" 
} 
+1

Возможный дубликат http://stackoverflow.com/questions/24028860/how-to-find-index-of-list-it-in-swift – Coyote

+2

Этот вопрос невероятно неясен. Пожалуйста, отредактируйте его (http://stackoverflow.com/posts/37121167/edit) и включите отчет о явной проблеме. – Hamish

+2

Код не работает, так как 'Alamofire.request' работает асинхронно, а' getUsuarios() 'никогда не вернет фактические принятые данные. – vadian

ответ

0

Alamofire.request работает асинхронно.

Функция/метод, который включает асинхронный вызов, может никогда имеет возвращаемое значение.

Вам нужен обратный вызов, например

func getUsuarios(completion : ([String]) -> Void) { 
    var usuariosDataBase = [String]() 

    Alamofire.request(.GET, url) 
    .responseJSON { response in 
     print(response) 

     do { 
     let json = try NSJSONSerialization.JSONObjectWithData(response.data!, options: .AllowFragments) 

     if let blogs = json as? [[String: AnyObject]] { 
      for blog in blogs { 
      if let usuario = blog["usuario"] as? String { 
       usuariosDataBase.append(usuario) 
      } 
      } 
     } 
     } catch { 
     print("error serializing JSON: \(error)") 
     } 
    completion(usuariosDataBase) 
    } 
} 

и назвать его

getUsuarios() { (usarios) in 
    if usarios.filter({$0.containsString(self.usuarioView.text!)}).isEmpty == false { 

    print("hola") 

    self.alerta("Ups, vas a tener que cambiar algo", texto2: "Ese usuario ya existe", alertaNum: "refreshAlert6") 

    self.usuarioView.text = "" 

    } 
} 

Важное примечание: Код очень прост. Вы должны добавить правильную обработку ошибок, по крайней мере, с учетом параметра ошибки, возвращаемого Alamofire.

+0

Whe Я использую ваш код. Я получаю эту ошибку, как ее исправить? Значение типа '[String]' не имеет члена 'containsString' – Juanma

+0

Да, конечно, я отредактировал ответ – vadian

Смежные вопросы