개요
이번 포스트에서는 스위프트와 아폴로를 사용하여 검색 기능을 구현하는 방법에 대해 알아보겠습니다. 아폴로는 GraphQL 클라이언트 라이브러리로서, 데이터 요청과 응답을 관리하는데 도움이 됩니다. 검색 기능은 많은 애플리케이션에서 필요한 핵심 기능 중 하나이며, 이를 스위프트와 아폴로를 함께 사용하여 간단하고 효율적으로 구현할 수 있습니다.
구현
- 먼저 아폴로를 프로젝트에 추가해야 합니다. 이를 위해
CocoaPods
또는Swift Package Manager
를 사용할 수 있습니다. Podfile에 다음과 같이 추가합니다.pod 'Apollo'
- 아폴로를 사용하기 위해
ApolloCodegen
을 프로젝트 설정에 추가합니다.Build Phases
에서Run Script
를 추가하고 다음 내용을 입력합니다."${PODS_ROOT}/Apollo/scripts/run-bundled-codegen" generate --target=swift --includes=./**/*.graphql
- 그 다음, 아폴로 클라이언트 인스턴스를 생성하고 GraphQL 서버의 엔드포인트 URL을 설정합니다. ```swift import Apollo
let apollo = ApolloClient(url: URL(string: “https://api.example.com/graphql”)!)
4. 검색 기능을 구현할 GraphQL 쿼리를 작성합니다. 예를 들어, `search`라는 필드를 가진 `Query`를 사용한다고 가정해보겠습니다.
```swift
import Foundation
struct SearchQuery: GraphQLQuery {
let queryString: String
init(queryString: String) {
self.queryString = queryString
}
var variables: GraphQLMap? {
return ["queryString": queryString]
}
var query: String {
return """
query search($queryString: String!) {
search(queryString: $queryString) {
id
title
description
}
}
"""
}
}
- 검색 기능을 호출하는 함수를 정의합니다.
perform
함수 내부에서 아폴로를 사용하여 서버로 GraphQL 쿼리를 전송하고 결과를 처리합니다. ```swift func searchQuery(query: String, completion: @escaping ([SearchResult]?, Error?) -> Void) { let searchQuery = SearchQuery(queryString: query)
apollo.fetch(query: searchQuery) { result in switch result { case .success(let graphQLResult): if let searchResults = graphQLResult.data?.search { completion(searchResults.map({ SearchResult(from: $0) }), nil) } else if let errors = graphQLResult.errors { completion(nil, errors.first) } else { completion(nil, nil) }
case .failure(let error):
completion(nil, error)
} } } ``` 6. 검색 결과를 표시하는 뷰 컨트롤러에서 `searchQuery` 함수를 호출합니다. ```swift searchQuery(query: "apple") { results, error in if let error = error {
// 오류 처리 } else if let results = results {
// 결과 처리 } } ```
결론
위와 같이 스위프트와 아폴로를 사용하여 검색 기능을 구현할 수 있습니다. 아폴로를 사용하면 GraphQL 서버와의 통신을 간편하게 처리할 수 있으며, 검색 기능을 효율적으로 구현할 수 있습니다.