SwiftData Query 오류

치킨치·2024년 11월 9일
0

SwiftData의 Query.filter를 이용할 때 제약이 많다는 걸 확인했다.
오류 스크린샷은 1개만 올렸지만 실제로는 아래의 오류들을 마주할 수 있었다:

  • guard let, if let을 쓰지 말것
  • 표현식을 한 줄로 표현할 것
  • optional 접근 금지
  • 지원하지 않는 function 사용금지.

아래의 하버사인 공식 예시를 참고하더라도, 위도 경도를 기준으로 두 점간의 거리를 계산하는 식은 실제로 복잡하기 때문에 리얼타임 쿼리용으로 사용하는 것에는 문제가 있을 것 같긴하다.

func haversineDistance(location1: Location, location2: Location) -> Double {
    let earthRadius = 6371000.0 // 지구 반경(m 단위)
    let dLat = (location2.latitude - location1.latitude) * .pi / 180
    let dLon = (location2.longitude - location1.longitude) * .pi / 180
    let a = sin(dLat / 2) * sin(dLat / 2) + cos(location1.latitude * .pi / 180) * cos(location2.latitude * .pi / 180) * sin(dLon / 2) * sin(dLon / 2)
    let c = 2 * atan2(sqrt(a), sqrt(1 - a))
    return earthRadius * c // m 단위의 거리 반환
}

실제로 어떻게 데이터를 필터링하라는 건지 ChatGPT에게 물어보니, 모든 데이터를 로드한 후에 직접 필터링해 사용하라는 답변을 했다.
하지만 이렇게하면 데이터 레코드들이 너무 많을 경우엔 페이지네이션으로 모든 데이터를 분산해서 로드하고 가공해야하므로 시간과 비용이 너무 많이든다.

구글맵과 네이버지도 등에선 GeoLocation과 거리를 주면 주위에 있는 목표물들 검색해주는 기능을 제공하고 있다. 그들은 어떻게 이 문제를 해결했을까?
위도 경도 계산법을 사용하지 않고 다른 방법을 사용하거나, 구역별로 미리 계산해둔 캐시를 사용하고 있지 않나 상상해본다.

시대가 많이 바뀌었다고 해도 ThirdParty 코드가 불안정하거나 프로젝트 내부에 하나라도 에러가 있다면 Preview 기능이 멈춰버리는 걸로보아 SwiftUI를 이용한 빠른 개발은 아직 요원한 것 같다.

profile
풀스텍이었던 iOS개발자

0개의 댓글