Избыточное соответствие CLLocationCoordinate2D протоколу «декодируемый» / «кодируемый» - PullRequest
0 голосов
/ 16 ноября 2018

Я пишу на внутренне используемом фреймворке, использующем 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

1 Ответ

0 голосов
/ 16 ноября 2018

Ваше расширение не должно быть частью цели тестирования.

Вы импортируете свою основную цель приложения в модульный тест с атрибутом @testable

import XCTest

@testable import MyProject

class MyProjectViewControllerTests: XCTestCase {}

Это позволяет вам использовать классы, расширения и т. Д. Из вашего проекта, не добавляя их в тестцель.

...