Quiero buscar en el array de objetos en swift
pero yo no sabía cómo 🙁

Traté de

filteredArrayUsingPredicate

pero aún así no funciona ,Que me da un mensaje de error

— Update —

el mensaje de error es

swift:42:9: 'Array<search_options>' does not have a member named 'filteredArrayUsingPredicate'

— Update —

class search_options {
        let id:String
        let option:String

        init(){}

        init(id:String ,option:String){
            self.id = id
            self.option = option
        }
    }

Solo quiero buscar en la opción variable

Y cuando traté de utilizar

func searchBarSearchButtonClicked( searchBar: UISearchBar!)
{
    let filteredArray = filter(search_options_array) { $0 == "test" }
    println(searchBar.text)
}

Tengo este mensaje

swift:40:58: 'search_options' is not a subtype of 'String'
  • Qué mensaje de error? Cómo Pedir
  • lo siento, soy nuevo aquí y el inglés no es mi idioma principal, de modo que yo no sabía y es difícil para mí dar muchos detalles, pero si voy a intentar
  • Supongo que usted está recibiendo este error porque filteredArrayUsingPredicate es un NSArray miembro. En Swift, debe utilizar el tipo de Array que no tiene que. Echa un vistazo @fluidsonic la respuesta de abajo para averiguar cómo filtrar un Array el uso de las nuevas filter método.
  • gracias , he probado y tengo nuevo mensaje de error

4 Comentarios

  1. 11

    Índice de búsqueda de objeto específico:

    if let index = find(myArray, objectIAmLookingFor) {
        //found! do something
    }

    Matriz de filtro:

    let filteredArray = filter(myArray) { $0 == objectIAmLookingFor }
    • Me sale este error swift:40:24: Tipo ‘search_options’ no se ajusta al protocolo de Equatable’
    • Si desea que dos instancias de search_options a ser comparable con el uso de == la clase (o estructura) tiene que implementar Equatable protocolo.
    • OK voy a buscar a cómo implementar Equatable clase ,Gracias por la ayuda
  2. 3

    Finalmente después de una larga búsqueda hice no ! ,
    Yo estaba buscando para encontrar una manera de hacer una dinámica de búsqueda como si de matriz de Cadena contiene

    "hello","lo","yes"

    y quiero llegar a todas las cadenas que contiene, por ejemplo, «lo»
    Quiero conseguir «hola» y «lo»

    así que la mejor manera que he encontrado es la expresión regular de búsqueda

    así que hacer un Bucle Para tirar todas las opciones en la Matriz y comparar cada variable de objeto para el patrón ,y guardarlo en la nueva matriz de objetos

        for var i = 0; i < search_options_array.count; i++ {
            let myRegex = "searched_text"
            if let match = search_options_array[i].option.rangeOfString(myRegex, options: .RegularExpressionSearch){
                filtered_options_array.append(search_options(id:search_options_array[i].id,option:search_options_array[i].option) )
            }
        }

    La mejor parte aquí usted puede utilizar todos los beneficios de la expresión regular y tener una copia de la suya antigua matriz así que si usted lo necesita.

    Gracias a cada uno por su ayuda.

  3. 2

    Porque filter acepta como un predicado de una función que asigna a cada elemento de la Array a un Bool valor (para determinar el valor que debe ser filtrados), en tu caso puede ser de esta manera;

    let a = [
        search_options(id: "a", option: "X"),
        search_options(id: "b", option: "Y"),
        search_options(id: "c", option: "X")
    ]
    
    let b = filter(a) { (e: search_options) in e.option == "X" }
    // ==> [search_options(id: "a", option: "X"), search_options(id: "c", option: "X")]
    • Funcionó para mí como un guante. Muchas gracias!
  4. 2

    La respuesta correcta es

    func searchBarSearchButtonClicked( searchBar: UISearchBar!)
    {
        let filteredArray = filter(search_options_array) { $0.option == "test" }
        println(searchBar.text)
    }

    o

    func searchBarSearchButtonClicked( searchBar: UISearchBar!)
    {
        let filteredArray = filter(search_options_array) { $0.id == "test" }
        println(searchBar.text)
    }

    Debe recuperar la propiedad del objeto buscado por el que realizar la búsqueda

    • Cómo comprobar bool?
    • a qué te refieres?
    • Ya lo he conseguido. Gracias

Dejar respuesta

Please enter your comment!
Please enter your name here