Я пишу на внутренне используемом фреймворке, использующем CoreLocation.Не спрашивайте меня, почему, но у меня есть требование сделать кодировку CLLocation
.Поэтому я придумал структуру
struct CLLocationEncodingStruct: Codable {
let coordinate: CLLocationCoordinate2D
let altitude: CLLocationDistance
let horizontalAccuracy: CLLocationAccuracy
let verticalAccuracy: CLLocationAccuracy
let speed: CLLocationSpeed
let course: CLLocationDirection
let timestamp: Date
public init(with location: CLLocation) {
coordinate = location.coordinate
altitude = location.altitude
horizontalAccuracy = location.horizontalAccuracy
verticalAccuracy = location.verticalAccuracy
speed = location.speed
course = location.course
timestamp = location.timestamp
}
var location: CLLocation {
return CLLocation(coordinate: coordinate, altitude: altitude, horizontalAccuracy: horizontalAccuracy, verticalAccuracy: verticalAccuracy, course: course, speed: speed, timestamp: timestamp)
}
}
Затем я соответствую Codable
в расширении CLLocation
.Ввод данных в эту структуру или извлечение данных из нее.Чтобы сделать эту работу, мне также пришлось заставить CLLocationCoordinate2D
соответствовать Codable
.Я сделал это, написав следующее очень сложное расширение
extenstion CLLocationCoordinate2D: Codable {}
Теперь я хотел сделать все правильно для изменения, поэтому я хотел начать писать модульные тесты.Проблема в том, что мое расширение до CLLocationCoordinate2D
должно быть частью обеих целей: модульного теста и самой платформы.К сожалению, это не компилируется.Сбой при
Redundant conformance of 'CLLocationCoordinate2D' to protocol 'Encodable'
Избыточное соответствие CLLocationCoordinate2D протоколу Decodable
Указывая, что CLLocationCoordinate2D
уже соответствует протоколу в той же строке кода.Построение цели, которая зависит от указанных структур, работает отлично, хотя.У вас есть идеи, чтобы это исправить?
Best,
geru