gpt4 book ai didi

swift - 在 getter 中返回非可选值,而在 setter 中允许可选值

转载 作者:搜寻专家 更新时间:2023-10-30 22:12:07 25 4
gpt4 key购买 nike

class MyClass {
private var _image: UIImage

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

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

我可以在没有附加功能的情况下实现吗?

即使我使用 didSet/willSet 它们仍然绑定(bind)到 UIImage 类型,我无法检查 nil ...

最佳答案

听起来你想使用一个隐式解包的可选。由于您的 getter 只是一个非可选 UIImage 的包装器,您知道您的 getter 将始终产生一个非 nil 值(并且由于 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")!
}
}
}
}

在哪里

image = nil

将为 _image 分配您的默认值,并且

image = UIImage(named: "something_that_exists")!

会将新图像分配给 _image。请注意,这还允许您从 UIImage(named:) 分配给变量,而无需强行解包可选。如果 UIImage 的初始化器因为找不到图像而失败,它将评估为 nil 并且仍然会导致 _image 被分配您的默认图像。

关于swift - 在 getter 中返回非可选值,而在 setter 中允许可选值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30657224/

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