Кандидат имеет несовпадающий тип «явно совпадающий тип» - PullRequest
0 голосов
/ 08 апреля 2020

Итак, сделка:

extension APIManager: LoginAPIManagerProtocol, LoginProtocol {}

protocol LoginAPIManagerProtocol { var user: User? { get } }

class APIManager {
...
var user: User?
...
}

Все это в разных файлах. LoginAPIManagerProtocol находится в другом модуле. APIManager и расширение находятся в одном и том же модуле.

Использование Swift 5, ios 13 мин SDK.

Я хочу предоставить пользовательскую переменную (уже определенную и использованную в старое унаследованное приложение) для новых потребителей (и проверяемых тестов) через определенный протокол.

Но!:

все, что я получаю, это

Итак ... что мне теперь делать? Попробовал изолировать проблему. Та же ошибка.

1 Ответ

0 голосов
/ 08 апреля 2020

Ответ, который я получил:

Я не уверен, почему я не могу выставить переменную такой, какая она есть. User не является протоколом; это просто подкласс NSManagedObject.

И я протестировал выставление простого bool из класса, и оно работало просто отлично.

Но в конце концов обнажил весь объект User не совсем разумно, потому что мне может потребоваться вытащить все его зависимости в зависимом модуле, даже если сам модуль не использует их все.

Итак, я:

  • объявлен протокол (в зависимом модуле), используемый для предоставления того, что мне нужно от User
public protocol ModuleUser {
  var id: Int64
}
  • , который используется в зависимом протоколе:
public protocol LoginAPIManagerProtocol {
...
var moduleUser: ModuleUser? { get }
...
}
  • и соответствие:
extension APIManager: LoginAPIManagerProtocol, LoginProtocol {
    var moduleUser: ModuleUser? {
        return self.user
    }
}

И теперь мне больше не нужно добавлять объект User в зависимый модуль; что шумно: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...