【发布时间】:2015-06-05 19:01:59
【问题描述】:
class book{
var nameOfBook: String!
}
var englishBooks=[book(),book(),book()]
var arr = englishBooks.filter {
contains($0.nameOfBook, "rt")
}
我正在使用此过滤器,但出现错误无法使用参数调用过滤器
【问题讨论】:
标签: swift
class book{
var nameOfBook: String!
}
var englishBooks=[book(),book(),book()]
var arr = englishBooks.filter {
contains($0.nameOfBook, "rt")
}
我正在使用此过滤器,但出现错误无法使用参数调用过滤器
【问题讨论】:
标签: swift
contains() 检查序列是否包含给定元素,例如
如果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"]
以上两个sn-ps可以简写成这样:
let list3 = englishBooks.filter{ ($0.nameOfBook.contains("English")) }
print(list3.map({"\($0.nameOfBook!)"}))
【讨论】:
SWIFT 4.0
为了过滤对象并得到结果数组,你可以使用这个
self.resultArray = self.upcomingAuctions.filter {
$0.auctionStatus == "waiting"
}
【讨论】:
如果您想从对象数组(匹配项)中删除具有特定 ID(matchIDsToDelete)的对象区间
var matches = [Match]
var matchIDsToDelete = [String]
matches = matches.filter { !matchIDsToDelete.contains($0.matchID) }
【讨论】:
2020 | SWIFT 5.1:
简短回答:
books.filter { $0.alias.range(of: filterStr, options: .caseInsensitive) != nil }
长样本:
public filterStr = ""
public var books: [Book] = []
public var booksFiltered: [Book] {
get {
(filterStr.isEmpty )
? books
: books.filter { $0.alias.range(of: filterStr, options: .caseInsensitive) != nil }
}
}
【讨论】:
我认为这对于没有错误输入的情况更有用。
englishBooks.filter( { $0.nameOfBook.range(of: searchText, options: .caseInsensitive) != nil}
【讨论】:
在 Swift 4.2 中使用 remove(where:) 功能。 filter isn't doing well with memory, remove(where:) 做得更好。
做你想做的事:
englishBooks.removeAll { !$0.nameOfBook.contains("English") }
【讨论】: