候选人的类型不匹配 'clearly matching type'

Candidate has non-matching type of 'clearly matching type'

所以这是交易:

extension APIManager: LoginAPIManagerProtocol, LoginProtocol {}

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

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

所有这些都在不同的文件中。 LoginAPIManagerProtocol 在不同的模块中。 APIManager 和扩展在同一个模块中。

使用 Swift 5,ios 13 分钟 SDK。

我想要的是通过定义的协议将用户变量(已经在旧的遗留应用程序中定义和使用)公开给新的消费者(和要模拟的测试)。

但是!:

all I get is this

所以..我现在该怎么办?尝试隔离问题。同样的错误。

我得到的答案:

我不确定为什么不能按原样公开变量。 User 不是协议;它只是 NSManagedObject.

的子class

我测试了从 class 公开一个简单的 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