gpt4 book ai didi

ios - 具有 self 的 Swift 通用协议(protocol)功能

转载 作者:行者123 更新时间:2023-11-28 08:01:32 26 4
gpt4 key购买 nike

我有一个符合委托(delegate)协议(protocol)的通用类。我希望能够在协议(protocol)方法中传递 self,但我不知道该怎么做。

protocol BodyPartManagerDelegate: class {
func doit(manager: BodyPartManager<Any>)
}

class BodyPartManager<Part> {

weak var delegate: BodyPartManagerDelegate?
var parts: [Part] = []

}

class Neck {}

class NeckManager: BodyPartManager<Neck> {

func doingit() {
delegate?.doit(manager: self)
}

}

通过上面的代码,我得到protocol 'BodyPartManagerDelegate' can only be used as a generic constraint because it has Self or associated type requirements。如何在此协议(protocol)的方法中访问 self

最佳答案

泛型类声明之间必须有共性,以便允许将它们中的任何一个传递给单个函数。这可以通过声明所有通用类型类都将支持的另一个协议(protocol)来实现(例如在基类中)。

这是一个例子:

protocol BodyPartManagers {}  // <-- common protocol for all generic classes
protocol BodyPartManagerDelegate: class
{
func doit(manager: BodyPartManagers)
}

extension BodyPartManagerDelegate
{
func doit(manager: Self) {}
}

class BodyPartManager<Part>:BodyPartManagers // <-- this will make all generic classes compatible
{
weak var delegate: BodyPartManagerDelegate?
var parts: [Part] = []
}

class Neck {}

class NeckManager: BodyPartManager<Neck>
{
func doingit() {
delegate?.doit(manager: self)
}

}

关于ios - 具有 self 的 Swift 通用协议(protocol)功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46537206/

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