ABa*_*ith 9 generics protocols swift
我最近在Swift中阅读了Protocols,Generic Type Constraints和Arrays.我的问题涉及博客中的以下两个例子:
代码:
protocol MyProtocol1 {
var myValue: Self { get }
}
let array: [MyProtocol1] = [] // Error.
Run Code Online (Sandbox Code Playgroud)
产生错误:
协议"MyProtocol1"只能用作通用约束,因为它具有Self或关联类型要求.
这是预期的,并且有关于该主题的几个SO问题.但是,通过更改myValue为函数,不再有任何错误,但在这两种情况下Self都会返回.
protocol MyProtocol2 {
func myValue() -> Self
}
let array: [MyProtocol2] = [] // This is okay.
Run Code Online (Sandbox Code Playgroud)
有谁知道这个看似奇怪的行为的原因?
我对此没有明确的答案,但我觉得这可能是由于班级规模和内部布局所致。
拥有关联类型或 Self 类型成员将影响对象的大小,从而影响数组大小,但使用 Self 作为方法返回类型将影响对象大小。
| 归档时间: |
|
| 查看次数: |
395 次 |
| 最近记录: |