我如何 return 一个非托管<CGColor>!在 Swift
How do I return an Unmanaged<CGColor>! in Swift
我正在使用 Lottie(动画框架),我正在尝试使用的其中一位代表希望我 return Unmanaged<CGColor>!
这是定义:
color(forFrame currentFrame: CGFloat, startKeyframe: CGFloat, endKeyframe: CGFloat, interpolatedProgress: CGFloat, start startColor: CGColor!, end endColor: CGColor!, currentColor interpolatedColor: CGColor!) -> Unmanaged<CGColor>!
如果我只是尝试 return 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
}
那么我怎样才能 return 正确的类型呢?
谢谢
您可以通过调用 passRetained
或 passUnretained
静态函数来创建 Unmanaged
实例,如下所示:
Unmanaged.passRetained(UIColor.white.cgColor)
但请记住,如果您决定使用 passRetained()
或 takeUnretainedValue()
函数,则应使用 takeRetainedValue
处理此变量的未来使用,如果您将使用 passUnretained
。如果不这样做 - 你将有内存泄漏或可能崩溃。
可以通过Unmanaged
结构中的takeRetainedValue()
方法获取:
Gets the value of this unmanaged reference as a managed reference and
consumes an unbalanced retain of it.
在您的情况下,实例类型应为 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>!
此外,您可能需要检查:
我正在使用 Lottie(动画框架),我正在尝试使用的其中一位代表希望我 return Unmanaged<CGColor>!
这是定义:
color(forFrame currentFrame: CGFloat, startKeyframe: CGFloat, endKeyframe: CGFloat, interpolatedProgress: CGFloat, start startColor: CGColor!, end endColor: CGColor!, currentColor interpolatedColor: CGColor!) -> Unmanaged<CGColor>!
如果我只是尝试 return 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
}
那么我怎样才能 return 正确的类型呢?
谢谢
您可以通过调用 passRetained
或 passUnretained
静态函数来创建 Unmanaged
实例,如下所示:
Unmanaged.passRetained(UIColor.white.cgColor)
但请记住,如果您决定使用 passRetained()
或 takeUnretainedValue()
函数,则应使用 takeRetainedValue
处理此变量的未来使用,如果您将使用 passUnretained
。如果不这样做 - 你将有内存泄漏或可能崩溃。
可以通过Unmanaged
结构中的takeRetainedValue()
方法获取:
Gets the value of this unmanaged reference as a managed reference and consumes an unbalanced retain of it.
在您的情况下,实例类型应为 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>!
此外,您可能需要检查: