swift – 在getter中返回非可选值,同时在setter中允许可选值

class MyClass {
    private var _image: UIImage

    var image: UIImage {
        set {
            if newValue == nil {
                _image = UIImage(named: "some_image")!
            }
        }
        get {
            return _image
        }
    }
}

我的目标是在访问图像时保证非可选值

我可以在没有额外功能的情

即使我使用didSet / willSet它们仍然绑定到那个UIImage类型,我无法检查nil …

听起来你想使用一个隐式解包的可选项.由于你的getter只是一个非可选UIImage的包装器,你知道你的getter总是会产生一个非零值(并且因为图像是隐式展开的,所以它会被视为这样),但这也会让你的setter接受nil值.也许是这样的.
class MyClass {
    private var _image: UIImage // ...

    var image: UIImage! {
        get {
            return _image
        }

        set {
            if let newValue = newValue {
                _image = newValue
            } else {
                _image = UIImage(named: "some_image")!
            }
        }
    }
}

哪里

image = nil

将_image分配给你的认值,和

image = UIImage(named: "something_that_exists")!

将新图像分配给_image.请注意,这也允许您从UIImage(名为:)分配变量,而不强行解开可选项.如果UIImage的初始化程序因为无法找到图像而失败,它将评估为nil并仍然会为_image分配认图像.

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...