gpt4 book ai didi

swift - associatedType 的值可以是协议(protocol)吗?

转载 作者:搜寻专家 更新时间:2023-10-31 22:55:07 25 4
gpt4 key购买 nike

<分区>

关联类型的值可以是协议(protocol)吗?

protocol A {
var name: String {get set}
}

protocol B: A {}

protocol C {
associatedtype T: B
var t : T {get set}
}

class D : C {
var t : B

init(t : B) {
self.t = t
}
}

class E : B {
var name: String = ""
}

class F : B {
var name: String = "ff"
}

在类 D 中,如果 t 的类型是 E 或 F,则代码可以编译。但是如果 t 的类型是 B(这是一个协议(protocol)),编译失败说明:

Type 'D' does not conform to protocol 'C'

如何让关联类型保存协议(protocol)值?有任何关于失败原因的指示吗?

更新问题

删除关联类型的绑定(bind)并仅使用 T 将无济于事。我的协议(protocol)也有我想访问的方法。例如:

protocol A {
func sayHello()
}

protocol B : A {
var name: String {get set}
}

extension B {
func sayHello() {
print("Hello")
}
}

protocol C {
associatedtype T
var t: T {get set}
}

class D : C {
typealias T = E
var t: T

init(t : T) {
self.t = t
}
}

class E : B {
var name: String = ""
}

class F : B {
var name: String = "ff"
}

class G<S: C> {
var a: S

init(a: S) {
self.a = a
}

func notWorking() {
a.t.sayHello()
}
}

在上面的例子中,我无法访问 sayHello 方法。

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