簡體   English   中英

如何返回Unmanaged <CGColor>!在斯威夫特

[英]How do I return an Unmanaged<CGColor>! in Swift

我正在使用Lottie(動畫框架),我試圖使用的其中一個代表期待我返回一個Unmanaged<CGColor>!

這是定義:

color(forFrame currentFrame: CGFloat, startKeyframe: CGFloat, endKeyframe: CGFloat, interpolatedProgress: CGFloat, start startColor: CGColor!, end endColor: CGColor!, currentColor interpolatedColor: CGColor!) -> Unmanaged<CGColor>!

如果我只是嘗試返回UIColor.white.cgColor我會收到錯誤消息

Cannot convert return expression of type 'CGColor' to return type 'Unmanaged<CGColor>!'

我已經嘗試過他們的文檔,但他們的示例只顯示使用它如下:

let colorBlock = LOTColorBlockCallback { (currentFrame, startKeyFrame, endKeyFrame, interpolatedProgress, startColor, endColor, interpolatedColor) -> Unmanaged<CGColor> in
    return aColor
}

那么我怎樣才能返回正確的類型呢?

謝謝

您可以通過調用passRetainedpassUnretained靜態函數來創建Unmanaged實例,如下所示:

Unmanaged.passRetained(UIColor.white.cgColor)

但請記住,對於這個變量的未來使用,應對症處理takeRetainedValue如果你決定使用passRetained()takeUnretainedValue()函數,如果你會使用passUnretained 如果不這樣做 - 你會有內存泄漏或可能崩潰。

您可以通過在Unmanaged結構中使用takeRetainedValue()方法來獲取它:

獲取此非托管引用的值作為托管引用,並使用它的不平衡保留。

在您的情況下,實例類型應為CGColor ,因此:

let cgColor = unmanagedColor.takeRetainedValue()

應該解決它。 請注意, unmanagedColor是調用您提到的定義的輸出:

color(forFrame currentFrame: CGFloat, startKeyframe: CGFloat, endKeyframe: CGFloat, interpolatedProgress: CGFloat, start startColor: CGColor!, end endColor: CGColor!, currentColor interpolatedColor: CGColor!) -> Unmanaged<CGColor>!


此外,您可能想要檢查:

何時使用takeUnretainedValue()或takeRetainedValue()來檢索Swift中的非托管對象?

暫無
暫無

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

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