class book{
var nameOfBook: String!
}
var englishBooks=[book(),book(),book()]
var arr = englishBooks.filter {
contains($0.nameOfBook, "rt")
}
Я использую этот фильтр, но с ошибкой нельзя вызвать фильтр с аргументом
class book{
var nameOfBook: String!
}
var englishBooks=[book(),book(),book()]
var arr = englishBooks.filter {
contains($0.nameOfBook, "rt")
}
Я использую этот фильтр, но с ошибкой нельзя вызвать фильтр с аргументом
contains()
проверяет, содержит ли последовательность данный элемент, например.
если a String
содержит заданный Character
.
Если вы намерены найти все книги, в которых имя содержит подстроку "rt", вы можете использовать rangeOfString()
:
var arr = englishBooks.filter {
$0.nameOfBook.rangeOfString("rt") != nil
}
или для нечувствительности к регистру:
var arr = englishBooks.filter {
$0.nameOfBook.rangeOfString("rt", options: .CaseInsensitiveSearch) != nil
}
В Swift 2, вы можете использовать
nameOfBook.containsString("rt") // or
nameOfBook.localizedCaseInsensitiveContainsString("rt")
и в Swift 3 это
nameOfBook.contains("rt") // or
nameOfBook.localizedStandardContains("rt") // or
nameOfBook.range(of: "rt", options: .caseInsensitive) != nil
Извините, это старый поток. Измените код немного, чтобы правильно инициализировать переменную 'nameOfBook'.
class book{
var nameOfBook: String!
init(name: String) {
nameOfBook = name
}
}
Затем мы можем создать массив книг.
var englishBooks = [book(name: "Big Nose"), book(name: "English Future
Prime Minister"), book(name: "Phenomenon")]
Функция "фильтр" массива принимает один аргумент, а некоторые логики, функция "содержит" может принимать простейшую форму строки, которую вы ищете.
let list1 = englishBooks.filter { (name) -> Bool in
name.contains("English")
}
Затем вы можете распечатать list1 следующим образом:
let list2 = arr1.map({ (book) -> String in
return book.nameOfBook
})
print(list2)
// print ["English Future Prime Minister"]
Выше двух фрагментов можно написать короткую руку следующим образом:
let list3 = englishBooks.filter{ ($0.nameOfBook.contains("English")) }
print(list3.map({"\($0.nameOfBook!)"}))
SWIFT 4.0
Чтобы отфильтровать объекты и получить результирующий массив, вы можете использовать этот
self.resultArray = self.upcomingAuctions.filter {
$0.auctionStatus == "waiting"
}
в случае, если вы хотите удалить интервал объекта, который имеет конкретные идентификаторы (matchIDsToDelete) из массива объектов (совпадений)
var matches = [Match]
var matchIDsToDelete = [String]
matches = matches.filter { !matchIDsToDelete.contains($0.matchID) }
В Swift 4.2 используйте функциональность remove(where:)
. filter
плохо справляется с памятью, remove(where:)
справляется с работой лучше.
Чтобы делать то, что вы хотите:
englishBooks.removeAll { !$0.nameOfBook.contains("English") }
Я думаю, что это более полезно из-за отсутствия неправильного набора текста.
englishBooks.filter( { $0. nameOfBook.range(of: searchText, options: .caseInsensitive) != nil}