簡體   English   中英

如何在Swift中創建弱引用字典?

[英]How to create a dictionary of weak references in Swift?

我需要將代表視圖的代表存儲在字典中。 現在,我想將它們作為弱引用,因此,如果用戶退出屏幕,我的詞典將不會阻止這些視圖進行清理。

我正在嘗試使用以下解決方案:

如何在Swift中聲明弱引用數組?

但是由於某種原因,我在代碼行中嘗試從弱對象中獲取真正的委托:

if let realDelegate = delegate.value {
    realDelegate.updateProgressBar(Int(progress * 100), aTaskIndentifier: downloadTask.taskIdentifier)
}

我在編譯時在Xcode中收到以下錯誤:

命令/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc失敗,退出代碼為1

您知道此解決方案有什么問題嗎? 也許您可以為此任務提供其他解決方案?

您可以使用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

但是請注意,我必須使用@objc。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM