gpt4 book ai didi

swift - 通用协议(protocol)属性声明

转载 作者:搜寻专家 更新时间:2023-11-01 05:32:17 27 4
gpt4 key购买 nike

假设我有一个关联类型 T 的协议(protocol)

protocol Helper{
associatedtype T
func help(_ item: T)
}

在一个类中,我想声明一个属性

class Manager<T>{
let item: T?
let helper: Helper<T>
//Error: Cannot specialize non-generic type 'Helper'

let anotherHelper: Helper
//Error: Protocol 'Helper' can only be used as a generic constraint because it has Self or associated type requirements
}

如何声明和使用 helper 属性以强制类的类型符合 Helper 协议(protocol)?

我敢肯定,很多具有 Java/C# 或其他类似语言背景的人在尝试做类似事情时都会遇到困难

最佳答案

在这种特殊情况下,您可以制作 TManager<T>成为Helper相反:

class Manager<T> where T : Helper {
let item: T.T?
let helper: T

init(helper: T) {
self.helper = helper
item = nil
}
}

如果你想要一个 Helper<Int> ,你这样做:

class IntHelper : Helper {
typealias T = Int

// ...
}

然后使用Manager<IntHelper> .

关于swift - 通用协议(protocol)属性声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55411675/

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