sal*_*140 14 oop protocols covariance swift
为什么不快速支持协议中定义的方法中的返回类型协变?例如
class Base { }
class Derived : Base { }
protocol Requirement {
var someVariable : Base { get }
}
struct MyStruct : Requirement{
let someVariable : Derived
}
Run Code Online (Sandbox Code Playgroud)
编译器会发出MyStruct不符合协议要求的错误.据我所知,MyStruct满足了LSP的所有要求,所以我想知道为什么Swift中不允许这样做?
想象一下你有:
var requirement: Requirement?
Run Code Online (Sandbox Code Playgroud)
并且你想分配一个类型的变量Base
let myBaseInstance = Base()
requirement.someVariable = myBaseInstance
Run Code Online (Sandbox Code Playgroud)
如果您查看您的结构,这是不可能的,因为 base 的实例不继承自Derived.
换句话说,这是不可能的(但根据协议的定义它必须是可能的):
var requirement: Requirement? = MyStruct()
requirement.someVariable = myBaseInstance //error
Run Code Online (Sandbox Code Playgroud)
您在第 2 行收到错误,因为 someVariable 必须是 类型Derived,但只是myBaseInstance类型Base并且可能不符合Derived.
| 归档时间: |
|
| 查看次数: |
559 次 |
| 最近记录: |