Ios 如何在Swift中创建弱引用词典?
我需要将作为视图的代理存储在字典中。现在我想将它们作为弱引用保存,因此如果用户退出屏幕,我的字典将不会阻止这些视图被清理 我试图使用以下解决方案: 但出于某种原因,当我添加一行代码试图从弱对象获取真正的委托时:Ios 如何在Swift中创建弱引用词典?,ios,xcode,swift,weak-references,Ios,Xcode,Swift,Weak References,我需要将作为视图的代理存储在字典中。现在我想将它们作为弱引用保存,因此如果用户退出屏幕,我的字典将不会阻止这些视图被清理 我试图使用以下解决方案: 但出于某种原因,当我添加一行代码试图从弱对象获取真正的委托时: if let realDelegate = delegate.value { realDelegate.updateProgressBar(Int(progress * 100), aTaskIndentifier: downloadTask.taskIdentifier) }
if let realDelegate = delegate.value {
realDelegate.updateProgressBar(Int(progress * 100), aTaskIndentifier: downloadTask.taskIdentifier)
}
我在编译时在Xcode中遇到以下错误:
命令/Applications/Xcode.app/Contents/Developer/toolschains/xcodefault.xctoolschain/usr/bin/swiftc失败,退出代码为1
你知道这个解决方案有什么问题吗?或者您可以为此任务提供其他解决方案?您可以使用
NSHashTable.weakObjectsHashTable()
而不是内置的Swift字典 您可以使用NSHashTable.weakObjectsHashTable()
而不是内置的Swift字典 以下是我的作品:
struct WeakReference<T: AnyObject> {
weak var value: T?
}
@objc protocol P { // Note @objc, class or AnyObject does not work
var i: Int { get }
}
class CP: P {
var i: Int = 0
}
let cP = CP() // Strong reference to prevent collection
let weakPD: [Int : WeakReference<P>] = [0 : WeakReference(value: cP)]
print("PD: \(weakPD[0]!.value!.i)") // 0
struct WeakReference{
弱var值:T?
}
@objc协议P{//Note@objc,class或AnyObject不起作用
变量i:Int{get}
}
类别CP:P{
变量i:Int=0
}
让cP=cP()//阻止收集的强引用
让weakPD:[Int:WeakReference]=[0:WeakReference(value:cP)]
打印(“PD:\(weakPD[0]!.value!.i)”//0
但请注意,我必须使用@objc。以下作品:
struct WeakReference<T: AnyObject> {
weak var value: T?
}
@objc protocol P { // Note @objc, class or AnyObject does not work
var i: Int { get }
}
class CP: P {
var i: Int = 0
}
let cP = CP() // Strong reference to prevent collection
let weakPD: [Int : WeakReference<P>] = [0 : WeakReference(value: cP)]
print("PD: \(weakPD[0]!.value!.i)") // 0
struct WeakReference{
弱var值:T?
}
@objc协议P{//Note@objc,class或AnyObject不起作用
变量i:Int{get}
}
类别CP:P{
变量i:Int=0
}
让cP=cP()//阻止收集的强引用
让weakPD:[Int:WeakReference]=[0:WeakReference(value:cP)]
打印(“PD:\(weakPD[0]!.value!.i)”//0
但请注意,我必须使用@objc。你检查过这个吗::是的,我现在检查过了。。。但我的问题与解决方案无关,他们说要改变发布优化级别,我在调试中遇到了这个问题。此外,更改此设置对我没有任何好处。您是否检查了此::是的,我现在检查了。。。但我的问题与解决方案无关,他们说要改变发布优化级别,我在调试中遇到了这个问题。此外,更改此设置对我没有任何好处。