jov*_*kov 6 getter setter optional swift
class MyClass {
private var _image: UIImage
var image: UIImage {
set {
if newValue == nil {
_image = UIImage(named: "some_image")!
}
}
get {
return _image
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的目标是在image访问时保证非可选值
我可以在没有额外功能的情
即使我使用didSet/ willSet他们仍然绑定到那种UIImage类型,我无法检查nil...
听起来你想使用一个隐式解包的可选项.由于你的getter只是一个非可选UIImage的包装器,你知道你的getter总是会产生一个非零值(因为它image是隐式解包的,所以会被视为这样),但这也会让你的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")!
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
哪里
image = nil
Run Code Online (Sandbox Code Playgroud)
将分配_image您的默认值,和
image = UIImage(named: "something_that_exists")!
Run Code Online (Sandbox Code Playgroud)
将分配新图像_image.请注意,这也允许您在UIImage(named:)不强行展开可选项的情况下从中分配变量.如果UIImage的初始化程序因为无法找到图像而失败,它将评估为nil并仍然会_image分配您的默认图像.