고급 장소 검색 구성요소
장소 검색 구성요소의 고급 버전은 장소 검색 Essentials와 동일한 기능을 제공합니다. 또한 구성요소의 작업 버튼을 구성하고 표시되는 리뷰 및 미디어에 검색 및 필터링 옵션을 적용할 수 있습니다.
고급 장소 검색 구성
AdvancedPlaceSearchView를 사용하여 고급 기능에 액세스합니다.
작업 버튼 구성
AdvancedPlaceSearchView의 .cornerActions 및 .mainActions 메서드를 사용하여 작업 버튼을 삭제하거나 맞춤설정합니다.
시각적 저작자 표시 요구사항
중요: 맞춤 작업 버튼이 Google 이외의 서드 파티와 사용자 정보를 공유하는 경우 사용자에게 명확하게 알려야 합니다. 시각적 저작자 표시 요구사항을 참고하세요.
이 예에서는 사용자 정보가 'Altostrat'로 전송됨을 명확하게 보여주는 맞춤 이미지를 보여줍니다.
검색 및 필터링 옵션 적용
AdvancedPlaceSearchView의 .searchMediaOptions 및 .searchReviewOptions 메서드를 사용하여 미디어 또는 리뷰의 검색 및 필터링을 사용 설정합니다.
고급 장소 검색 예
기본 작업 버튼 만들기 및 코너 작업 삭제
이 코드 샘플은 장소를 즐겨찾기에 추가하거나 즐겨찾기에서 삭제하는 기본 작업 버튼을 만듭니다. 또한 코너 작업이 구성되지 않도록 합니다.
Swift
struct AdvancedPlaceSearchDemoView: View { private let configuration = AdvancedPlaceSearchConfiguration( content: [.address(), .rating(), .type()], preferTruncation: true, // default is false theme: PlacesMaterialTheme(), attributionPosition: .bottom, // default is top mediaSize = .medium, // default is .small selectable: true // default is false ) // can also do let placeSearchViewRequest = .searchNearby(...) to configure a searchNearby request @State private var placeSearchViewRequest = .searchByText( SearchByTextRequest( textQuery: "Googleplex", placeProperties: [.all], locationBias: CircularCoordinateRegion( center: CLLocationCoordinate2D(latitude: 0, longitude: 0), radius: 0 ) ) ) @State private var favoritePlaces: Set<String> = [] var body: some View { AdvancedPlaceSearchView( orientation: .horizontal, // default is vertical request: placeSearchViewRequest, configuration: configuration ) .onLoad { places in print("places: \(places)") } .onRequestError { error in print("error: \(error)") } .onPlaceSelected { place, index in print("place: \(place)") print("index: \(index)") } .mainActions { place in var actions: [MainPlaceActionElement] = [] let placeID = place.placeID! if self.favoritePlaces.contains(placeID) { actions.append( .action( MainPlaceAction( image: Image(systemName: "heart.fill"), label: "Unfavorite" ) { _ in self.toggleFavorite(placeID) } ) ) } else { actions.append( .action( MainPlaceAction( image: Image(systemName: "heart"), label: "Favorite" ) { _ in self.toggleFavorite(placeID) } ) ) } actions.append(.actionId(.openMap(style: .primary))) return actions } // Ensures that there are no corner actions. .cornerActions { _ in return [] } } func toggleFavorite(_ placeID: String) { if favoritePlaces.contains(placeID) { favoritePlaces.remove(placeID) } else { favoritePlaces.insert(placeID) } } }
리뷰 및 미디어 필터링
이 코드 샘플은 검색 결과를 필터링하여 '커피'를 언급하는 미디어 및 리뷰만 표시합니다.
Swift
struct DemoView: View { static let peetsCoffeePlaceID = "ChIJT7FdmYiAhYAROFOvrIxRJDU" // Query for loading the place details component. @State var query: PlaceDetailsQuery = PlaceDetailsQuery( identifier: .placeID(peetsCoffeePlaceID) ) let searchMediaOptions = SearchMediaOptions(query: "coffee", rankPreference: .newest) let searchReviewOptions = SearchReviewsOptions(query: "coffee", rankPreference: .newest) var body: some View { AdvancedPlaceDetailsView( query: $query, configuration: AdvancedPlaceDetailsConfiguration( content: [.media(), .reviews()], theme: PlacesMaterialTheme() ), placeDetailsCallback: { _ in } ) .searchMediaOptions(searchMediaOptions) { results in guard let result = results.first else { return } switch result { case .success(let summary): print("Summary: \(summary)") case .failure(let error): print("Error: \(error)") } } .searchReviewsOptions(searchReviewsOptions) { results in guard let result = results.first else { return } switch result { case .success(let summary): print("Summary: \(summary)") case .failure(let error): print("Error: \(error)") } } }