我正在尝试定义一个协议“存储库”,它需要定义几个属性(实现一个特定的协议“ DataSource”)
但是由于我的真实场景的复杂性,所以其中一个属性必须是“ DataSource”的子协议。
我将问题简化为以下简单代码:
protocol DataSource { }
protocol ExtraDataSouce: DataSource {
func method1() -> String
}
struct MyDataSource: ExtraDataSouce {
func method1() -> String {
return "whatever"
}
}
protocol Repository {
var firstDataSource: DataSource { get }
var secondDataSource: DataSource { get }
}
struct MyRepository: Repository {
var firstDataSource: DataSource
var secondDataSource: MyDataSource
}
Run Code Online (Sandbox Code Playgroud)
由于“ MyRepository”不符合“ Repository”,在编译时返回错误。但是我认为它确实可以...关于为什么它不接受定义为“ MyDataSource”的“ MyRepository”中的“ secondDataSource”的任何想法?
您的存储库协议实现了 2 个 DataSource 类型的变量,当您尝试修改符合存储库协议的结构中的变量类型时,由于所需的类型,它不会让您执行此操作。您应该使用关联类型来进行此更改
protocol Repository {
associatedtype type = DataSource
var firstDataSource: DataSource { get }
var secondDataSource: type { get }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1684 次 |
| 最近记录: |