swift – 在getter中返回非可选值,同时在setter中允许可选值
发布时间:2020-12-14 05:39:45 所属栏目:百科 来源:网络整理
导读:class MyClass { private var _image: UIImage var image: UIImage { set { if newValue == nil { _image = UIImage(named: "some_image")! } } get { return _image } }} 我的目标是在访问图像时保证非可选值 我可以在没有额外功能的情 即使我使用didSet /
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分配默认图像. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- flex_String 和 ByteArray 如何进行互相转换;
- c – g“调用”函数不带括号(不是f(),而是f;).为
- c – 没有标题栏的QDockWidget
- ruby-on-rails – 如何为rails中的线程编写测试用
- ruby-on-rails – 通过ansible playbook安装私有
- iphone – 在调用respondsToSelector之前检查委托
- postgresql – 从Postgres JDBC表中读取Spark的速
- ruby-on-rails – 在Heroku上运行delayed_job wo
- 在Ruby中从String对象获取括号之间的内容
- nand flash与烧录器
热点阅读