是否可以在 Swift 中创建具有 Self 或关联类型要求的通用计算属性,如果可以,如何?
Posted
技术标签:
【中文标题】是否可以在 Swift 中创建具有 Self 或关联类型要求的通用计算属性,如果可以,如何?【英文标题】:Is is possible to create generic computed properties with Self or associated type requirements in Swift, and if so how? 【发布时间】:2019-07-08 06:15:37 【问题描述】:考虑以下几点:
protocol SomeProtocol: Equatable
// then, elsewhere...
var someValue: Any?
func setSomething<T>(_ value: T) where T: SomeProtocol
someValue = value
func getSomething<T>() -> T? where T: SomeProtocol
return someValue as? T
这些函数工作正常,但本质上类似于计算属性。有什么方法可以实现以下内容吗?
var something<T>: T where T: SomeProtocol
get return someValue as? T
set someValue = newValue
感谢您的阅读。抱歉,如果这个问题已经在其他地方问过,我已经搜索过,但有时我的搜索功能很弱。
【问题讨论】:
你想达到什么目的?这在哪里派上用场? 更少的代码更清晰@MojtabaHosseini 为什么计算属性返回存储属性?为什么不这样:struct SomeStruct<T:SomeProtocol> var someValue: T?
【参考方案1】:
需要在泛型类型上定义计算属性,计算属性本身不能定义泛型类型参数。
struct Some<T:SomeProtocol>
var someValue:Any
var something:T?
get
return someValue as? T
set
someValue = newValue
【讨论】:
@ScottyBlades 您可以在Some
的扩展中定义something
,但您仍然需要通用结构/类。只有SomeProtocol
是行不通的。以上是关于是否可以在 Swift 中创建具有 Self 或关联类型要求的通用计算属性,如果可以,如何?的主要内容,如果未能解决你的问题,请参考以下文章
我们可以在 Swift 中创建具有非可选属性的类型擦除弱引用吗?
在 Swift 3 中创建具有自定义大小的 VideoPlayer
如何在 Swift 中创建具有自定义形状的 UIButton?