gpt4 book ai didi

Swift Self 作为关联类型绑定(bind)在协议(protocol)中

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

我想强制关联类型为Self,但编译器没有。
这是我想要编译的内容:

protocol Protocol {
// Error: Inheritance from non-protocol, non-class type 'Self'
associatedtype Type: Self
}

您可能会问,为什么不直接使用 Self 而不是关联类型?仅仅是因为我不能:关联类型是从父协议(protocol)继承的。在父协议(protocol)中更改它没有意义。
这是类似于我正在尝试做的事情:

protocol Factory {
associatedtype Type

func new() -> Type
}

protocol SelfFactory: Factory {
associatedtype Type: Self // Same Error
}

编辑:
马特的回答几乎就是我要找的。它在运行时表现得像我希望的那样,但在编译时限制不够。
我希望这是不可能的:

protocol Factory {
associatedtype MyType
static func new() -> MyType
}

protocol SelfFactory: Factory {
static func new() -> Self
}

final class Class: SelfFactory {

// Implement SelfFactory:
static func new() -> Class {
return Class()
}

// But make the Factory implementation diverge:
typealias MyType = Int

static func new() -> Int {
return 0
}
}

我希望 Class 中的 typealias 触发重新声明错误或类似错误。

最佳答案

我知道这是一个老问题,但您可以从 Swift 4.0 开始这样做:

protocol Factory {
associatedtype MyType
static func new() -> MyType
}

protocol SelfFactory: Factory where MyType == Self { }

where 子句不是很棒吗?

关于Swift Self 作为关联类型绑定(bind)在协议(protocol)中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39058511/

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