ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.