代码之家  ›  专栏  ›  技术社区  ›  Rolando

在SwiftUI中定义和使用带有可选图像的模型的最佳方式是什么?

  •  0
  • Rolando  · 技术社区  · 5 年前

    我想有一个模型“地方”,有一个可选的。

    struct PlaceObj: Identifiable {
    let id = UUID()
    let name: String
    let image: UIImage
    }
    

    并不是每个PlaceItem都有一个图像,所以我想保留它的可选性。我想这样使用它:

    PlaceObj(
    name: "Place1"
    )
    

    PlaceObj(
    name: "Place1",
    image: nil
    )
    

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

    1 回复  |  直到 5 年前
        1
  •  5
  •   Leo Dabus    5 年前

    将其默认值设置为 nil ,编译器生成的默认成员初始值设定项将具有要匹配的默认参数,这要归功于 SE-0242 – Synthesize default values for the memberwise initializer

    struct PlaceObj: Identifiable {
        let id = UUID()
        let name: String
        var image: UIImage? = nil
    }
    

    init(name: String, image: UIImage? = nil) {
        self.name = name
        self.image = image
    }
    
        2
  •  1
  •   jnpdx    5 年前

    您可以声明自己的初始值设定项:

    struct PlaceObj: Identifiable {
        let id = UUID()
        let name: String
        let image: UIImage?
        
        init(name: String) {
            self.name = name
            self.image = nil
        }
    }
    

    let b = PlaceObj(name: "Bob")

    struct PlaceObj: Identifiable {
        let id = UUID()
        let name: String
        var image: UIImage? = nil
    }
    

    这避免了创建初始值设定项,但请记住,它仅在Swift 5.1中可用+