2015-06-05 17 views
12
class book{ 
    var nameOfBook: String! 
} 

var englishBooks=[book(),book(),book()] 
var arr = englishBooks.filter { 
    contains($0.nameOfBook, "rt") 
} 

sto usando questo filtro, ma con l'errore non può invocare filtro con un argomentomatrice filtro Swift di oggetti

risposta

27

controlla se una sequenza contiene un dato elemento, ad esempio se un String contiene un dato Character.

Se la vostra intenzione è quella di trovare tutti i libri in cui il nome contiene il stringa "rt", quindi è possibile utilizzare rangeOfString():

var arr = englishBooks.filter { 
    $0.nameOfBook.rangeOfString("rt") != nil 
} 

o per case-insensitive confronto:

var arr = englishBooks.filter { 
    $0.nameOfBook.rangeOfString("rt", options: .CaseInsensitiveSearch) != nil 
} 

A partire da Swift 2, è possibile utilizzare

nameOfBook.containsString("rt") // or 
nameOfBook.localizedCaseInsensitiveContainsString("rt") 

in Swift 3 questo è

nameOfBook.contains("rt") // or 
nameOfBook.localizedStandardContains("rt") // or 
nameOfBook.range(of: "rt", options: .caseInsensitive) != nil 
5

Purtroppo questo è un vecchio thread. Cambia leggermente il codice per iniziare correttamente la variabile 'nameOfBook'.

class book{ 
    var nameOfBook: String! 
    init(name: String) { 
     nameOfBook = name 
    } 
} 

Quindi possiamo creare una serie di libri.

var englishBooks = [book(name: "Big Nose"), book(name: "English Future 
Prime Minister"), book(name: "Phenomenon")] 

funzione di 'filtro' del matrice prende un argomento e alcune logiche, 'contiene' funzione può assumere una forma più semplice di una stringa che si sta cercando.

let list1 = englishBooks.filter { (name) -> Bool in 
    name.contains("English") 
} 

è quindi possibile stampare lista1 in questo modo:

let list2 = arr1.map({ (book) -> String in 
    return book.nameOfBook 
}) 
print(list2) 

// print ["English Future Prime Minister"] 

Sopra due frammenti possono essere scritti breve mano in questo modo:

let list3 = englishBooks.filter{ ($0.nameOfBook.contains("English")) } 
print(list3.map({"\($0.nameOfBook!)"})) 
Problemi correlati