如何在 swift 中定义和使用具有可选属性的结构?

Rol*_*ndo 3 ios swift

我想要一个具有可选功能的模型“地方”。

struct PlaceObj: Identifiable {
let id = UUID()
let name: String
let image: UIImage
}
Run Code Online (Sandbox Code Playgroud)

并非每个 PlaceItem 都可能有图像,因此我想将其保留为可选。我想这样使用它:

PlaceObj(
name: "Place1"
)
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误,即图像未定义,这意味着我必须这样做:

PlaceObj(
name: "Place1",
image: nil
)
Run Code Online (Sandbox Code Playgroud)

但除非我在 UIImage 后面加上问号,否则我不能做 nil 。有没有最佳实践/首选方法来处理这个问题?在尝试使用它时,是否没有办法在每个实例化中省略“image:nil”?

Ale*_*ica 7

给它一个默认值nil,编译器生成的默认成员初始化程序将具有要匹配的默认参数,这要归功于SE-0242 \xe2\x80\x93 合成成员初始化程序的默认值

\n
struct PlaceObj: Identifiable {\n    let id = UUID()\n    let name: String\n    var image: UIImage? = nil\n}\n
Run Code Online (Sandbox Code Playgroud)\n

编译器提供的初始化程序的行为就像您编写的那样:

\n
init(name: String, image: UIImage? = nil) {\n    self.name = name\n    self.image = image\n}\n
Run Code Online (Sandbox Code Playgroud)\n