gpt4 book ai didi

swift - AnyObject 类型泛型约束的引用类型协议(protocol)

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

我有一个通用结构声明如下:

struct WeakReference<T: AnyObject> {
weak var value: T?

init(value: T?) {
self.value = value
}
}

还有一个协议(protocol):

protocol SomeProtocol: class {

}

但我无法声明类型为 WeakReference<SomeProtocol> 的变量, 编译器提示说

'WeakReference' requires that SomeProtocol be a class type

有趣的是,在 Swift 中,class是 AnyObject 的类型别名。

我实际上想保存一个 WeakReference<SomeProtocol> 的数组因为数组包含强引用。

Class-only generic constraints in Swift是一个类似的问题,但并没有真正解决这个问题。

我们怎样才能通过 SomeProtocolWeakReference

编辑:以下场景编译正常,但我们失去了持有弱引用的能力:

struct Reference<T> {
var value: T?

init(value: T?) {
self.value = value
}
}

var array: [Reference<SomeProtocol>] = []

最佳答案

很简单。您正在传递 SomeProtocol,这是一个 protocol。您需要向那里传递特定的类类型。

示例:

class SomeImplementation: SomeProtocol {
}

var weakSome: WeakReference<SomeImplementation> = ...

或者您可以通过使用 @objc 注释标记协议(protocol)来绕过它,但我不喜欢这种方法。

@objc protocol SomeProtocol: class {

}

var weakSome: WeakReference<SomeProtocol> = ...

尝试检查 this answer ,它可能会为您提供有关该问题的更多背景信息。

关于swift - AnyObject 类型泛型约束的引用类型协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51706773/

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