@State private var keyword = ""
text
엔 검색 단어 바인딩placement
는 .automatic으로 하면 적합한 위치에 서치바 표시(네비게이션 바 있으면 네비게이션 바에 추가)prompt
엔 검색창의 placeholder 입력suggestions
는 검색 제안 클로저List {
...
}
.searchable(text: $keyword, prompt: "내용을 검색합니다.")
nsPredicate
를 사용한다.
.onChange(of: keyword) {
if keyword.isEmpty {
//저장된 전체 메모 표시
memoList.nsPredicate = nil
} else {
memoList.nsPredicate = NSPredicate(format: "content CONTAINS[c] %@", keyword)
}
}
sidebar, toolbar
는 macOS 관련.searchable(text: $keyword, placement: .navigationBarDrawer(displayMode: .always), prompt: "검색어를 입력하세요") {
}
onSubmit(of: .search)
사용 .onChange(of: keyword) { newValue in
if newValue.count == 0 {
items = AppleProduct.sampleList
}
}
.onSubmit(of: .search) {
if keyword.count > 0 {
items = AppleProduct.sampleList.filter {
$0.name.contains(keyword)
}
}
}
.searchable(text: $keyword, placement: .navigationBarDrawer(displayMode: .always), prompt: "검색어를 입력하세요") {
Text("Mac")
Label("MacBook", systemImage: "laptopcomputer")
}
searchCompletion
을 추가해야 한다. .searchable(text: $keyword, placement: .navigationBarDrawer(displayMode: .always), prompt: "검색어를 입력하세요") {
Text("Mac").searchCompletion("Mac")
Label("MacBook", systemImage: "laptopcomputer").searchCompletion("MacBook")
}
struct Search: View {
@State private var keyword = ""
@State private var items = AppleProduct.sampleList
var body: some View {
List(items) { item in
Text(item.name)
}
.searchable(text: $keyword, placement: .automatic, prompt: "검색어를 입력하세요") {
}
.onChange(of: keyword) { newValue in
if newValue.count > 0 {
items = AppleProduct.sampleList.filter {
$0.name.contains(newValue)
}
} else {
items = AppleProduct.sampleList
}
}
}
}