gpt4 book ai didi

swift - 如何让同一个类的对象成为初始化器的返回值?

转载 作者:行者123 更新时间:2023-11-28 10:10:38 26 4
gpt4 key购买 nike

我有这个功能:

extension UIImage {

static func from(layer: CALayer) -> UIImage? {
UIGraphicsBeginImageContext(layer.frame.size)
layer.render(in: UIGraphicsGetCurrentContext()!)
let outputImage: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return outputImage
}

}

我怎样才能把它改成这样呢?

extension UIImage {

convenience init(layer: CALayer) {
self.init();
UIGraphicsBeginImageContext(layer.frame.size)
layer.render(in: UIGraphicsGetCurrentContext()!)
let outputImage: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self = outputImage; // Error: cannot assign to self: self is immutable
}

}

我希望 UIGraphicsGetImageFromCurrentImageContext() 的结果成为启动的“ self ”。但结果已经是一个 UIImage。我不认为我应该在此函数中使用“变异”?

最佳答案

由于错误状态 UIImage 是不可变的。您可以做的是从 outputImage 获取 CGImage 并使用 UIImage init(cgImage: CGImage) initializer从中初始化一个新图像:

extension UIImage {
convenience init?(layer: CALayer) {
UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, 0)
defer { UIGraphicsEndImageContext() }
guard let context = UIGraphicsGetCurrentContext() else {
return nil
}
layer.render(in: context)
guard let outputImage = UIGraphicsGetImageFromCurrentImageContext()?.cgImage else {
return nil
}
self.init(cgImage: outputImage)
}
}

关于swift - 如何让同一个类的对象成为初始化器的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48698190/

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