gpt4 book ai didi

swift - 扩展现有协议(protocol)以使用默认实现实现另一个协议(protocol)

转载 作者:IT王子 更新时间:2023-10-29 05:11:17 26 4
gpt4 key购买 nike

是否可以通过扩展将协议(protocol)合规性添加到不同的协议(protocol)?

例如我们希望 A 遵守 B:

protocol A {
var a : UIView {get}
}

protocol B {
var b : UIView {get}
}

我想为类型 A 的对象提供 B 的默认实现(合规性)

// This isn't possible
extension A : B {
var b : UIView {
return self.a
}
}

动机是在需要 B 的情况下重用 A 的对象而不创建我自己的“桥梁”

class MyClass {
func myFunc(object : A) {
...
...
let view = object.a
... do something with view ...

myFunc(object) // would like to use an 'A' without creating a 'B'
}

func myFunc2(object : B) {
...
...
let view = object.b
... do something with view ...

}
}

作为旁注,我们可以扩展一个类来实现一个协议(protocol)

class C {
let C : UIView
}

// this will work
extension C : B {
var B : UIView {
return self.c
}
}

并且协议(protocol)可以给出默认实现

extension A {
// a default implementation
var a : UIView {
return UIView()
}
}

最佳答案

当扩展 A 时,您可以指定该类型也符合 B:

extension A where Self: B {
var b : UIView {
return self.a
}
}

然后让你的类型符合AB,例如

struct MyStruct : A, B {
var a : UIView {
return UIView()
}
}

由于协议(protocol)扩展,MyStruct 的实例将能够使用 ab,即使只有 aMyStruct 中实现:

let obj = MyStruct()
obj.a
obj.b

关于swift - 扩展现有协议(protocol)以使用默认实现实现另一个协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37326309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com