-
swiftui에서의 검색Swift/SwiftUI 2024. 2. 17. 00:40
계산 속성을 이용하여 나타낸다.
filteredStation을 계산속성으로 나타내고, 그 목록을 나타냄.
조건절로 거른다.
var filteredStations: [SubwayStation] { if searchText.isEmpty { return stations } else { let initials = KoreanTextConverter.getInitials(from: searchText) return stations.filter { station in let stationInitials = KoreanTextConverter.getInitials(from: station.name) return stationInitials.contains(initials) } } }
List(filteredStations) { station in Text(station.name) }
이 부분에서 filteredStation를 이용해 검색 결과를 나타낸다.
// // ContentView.swift // searchapp // // Created by Lyla on 2024/02/17. // import SwiftUI struct ContentView: View { @State private var searchText = "" @State private var stations = [ SubwayStation(name: "강남"), SubwayStation(name: "역삼"), SubwayStation(name: "삼성"), SubwayStation(name: "선릉"), SubwayStation(name: "잠실"), SubwayStation(name: "건대입구"), SubwayStation(name: "왕십리") ] var filteredStations: [SubwayStation] { if searchText.isEmpty { return stations } else { let initials = KoreanTextConverter.getInitials(from: searchText) return stations.filter { station in let stationInitials = KoreanTextConverter.getInitials(from: station.name) return stationInitials.contains(initials) } } } var body: some View { VStack { TextField("지하철 역 검색", text: $searchText) .textFieldStyle(RoundedBorderTextFieldStyle()) .padding() List(filteredStations) { station in Text(station.name) } .listStyle(InsetGroupedListStyle()) } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } } struct KoreanTextConverter { static func getInitials(from text: String) -> String { let koreanText = NSMutableString(string: text) as CFMutableString CFStringTransform(koreanText, nil, kCFStringTransformToLatin, false) CFStringTransform(koreanText, nil, kCFStringTransformStripCombiningMarks, false) return koreanText as String } } #Preview { ContentView() }
'Swift > SwiftUI' 카테고리의 다른 글
[SwiftUI] 플로팅 버튼 만들기 (0) 2024.02.22 Gird, LazyVGrid (0) 2024.02.19 SwiftUI 애니메이션 적용 방법 (0) 2024.01.30 [SwiftUI] @EnvironmentObject (1) 2024.01.07 [SwiftUI] fullscreen으로 view 띄우기: fullScreenCover (0) 2024.01.07