gpt4 book ai didi

swift - 如何将生成协议(protocol)声明为委托(delegate)?

转载 作者:行者123 更新时间:2023-11-30 10:15:04 24 4
gpt4 key购买 nike

我们可以像下面这样生成协议(protocol):

protocol SomeDelegate {
typealias T
func xxx(x: T)
}

并让一些类符合它:

class AA: SomeDelegate {
typealias T = Int
func xxx(x: T) {
// do some thing
}
}

我的问题是如何声明一些符合生成协议(protocol)的属性,如下所示:

class BB {
var delegate: SomeDelegate
}

上面的代码会引发错误:

Protocol 'SomeDelegate' can only be used as a generic constraint 
because it has Self or associated type requirements

看来我可以使用该协议(protocol)作为委托(delegate),如下所示:

class BB {
var delegate: AA?
}

但是,这不是我想要的,它会导致我的委托(delegate)无法继承其他父类

最佳答案

您可以使用泛型,使用 SomeDelegate 作为类型约束:

class BB <U : SomeDelegate> {
var delegate: U? = nil
}

这样,当您初始化 BB 实例时,您只需提供 U 的类型:

struct MyStruct : SomeDelegate {
// The argument of xxx needs to be a concrete type here.
func xxx(x: Int) {
// ...
}
}

let bb = BB<MyStruct>()

关于swift - 如何将生成协议(protocol)声明为委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30568984/

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