Swift 关联(typealias)类型和Self-in协议如何工作?
对不起,我是一个编程新手,我试图表达我想问的问题。请原谅我。 我在协议中看到过类似的情况Swift 关联(typealias)类型和Self-in协议如何工作?,swift,protocols,type-alias,Swift,Protocols,Type Alias,对不起,我是一个编程新手,我试图表达我想问的问题。请原谅我。 我在协议中看到过类似的情况 protocol Pro1 { typealias Element // ... } protocol Pro2: Pro1 { typealias Element = Self // ... } 元素在协议中,该元素是否相互关联 我不明白下面的表达是什么意思: typealias Element = Self 非常感谢。Pro1 写这个 protocol Pro1 {
protocol Pro1 {
typealias Element
// ...
}
protocol Pro2: Pro1 {
typealias Element = Self
// ...
}
元素
在协议中,该元素
是否相互关联
我不明白下面的表达是什么意思:
typealias Element = Self
非常感谢。Pro1
写这个
protocol Pro1 {
typealias Element
}
您只是告诉我们将有一个名为Element
的类型
Pro2
加上这个
protocol Pro2: Pro1 {
typealias Element = Self
}
您告诉编译器,元素
将与实现Pro2
的类型相同
是的,在Pro1
和Pro2
中的元素之间存在一种关系
向Pro1添加方法
让我们声明将在Pro1
中使用Element
的两个方法
protocol Pro1 {
typealias Element
func a() -> Element
func b(elm: Element)
}
符合Pro1的要求
现在,符合Pro1
的类将如下所示
class Foo: Pro1 {
func a() -> String {
return ""
}
func b(elm: String) {
}
}
如您所见,编译器强制我们将a
的返回类型和b
的参数设置为相同类型
符合Pro2的要求
现在让我们尝试将另一个类与Pro2相一致。同样Pro1
将迫使我们声明方法a
和b
,其中a的返回类型等于b
的参数。
此外,Pro2
将强制我们将此类型设置为当前类型的类型Boo
因此,前面的类必须符合Pro2
,因为String
不同于Foo
class Foo: Pro2 {
func a() -> String { // <- compiler error
return ""
}
func b(elm: String) { // <- compiler error
}
}
class Boo: Pro2 {
func a() -> Boo {
return Boo()
}
func b(elm: Boo) {
}
}