gpt4 book ai didi

swift - 在 Swift 中创建一个接受 native Swift 协议(protocol)的弱容器

转载 作者:可可西里 更新时间:2023-11-01 01:59:57 27 4
gpt4 key购买 nike

这是 Swift 中的标准样板弱容器。

struct Weak<T: AnyObject> {
weak var value: T?
init(value: T) {
self.value = value
}
}

除非你想让 T 成为一个协议(protocol),否则它工作得很好,例如,

protocol ImplementationHiding: class {}
class Implementation: ImplementationHiding {}
let w = Weak(value: Implementation() as ImplementationHiding)

遗憾的是,这无法编译。我发现让它工作的唯一方法是在协议(protocol)上引入 @objc:

@objc protocol ImplementationHiding {}

我发现的唯一解决这个问题的方法非常丑陋,因为它抛出了编译时安全性。

struct Weak<T> {
private let get: () -> T?
init(value: AnyObject, type: T.Type = T.self) {
get = { [weak value] in value as! T? }
}
var value: T? {
return get()
}
}

如何使用原生 Swift 协议(protocol)创建 Weak 作为 T

最佳答案

如果您不介意失去一些编译时安全性,您可以更改 Weak 以接受 Any 作为 T 然后将值存储为任何对象:

struct Weak<T: Any>{
weak var value: AnyObject?

public var ref: T? {
get {
return value as? T
}
}

init(value: T) {
self.value = value as AnyObject
}
}

关于swift - 在 Swift 中创建一个接受 native Swift 协议(protocol)的弱容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47441073/

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