我是一个敏捷的新手,我正在try 使用带有可选属性的 struct .我做了很多搜索,得到了一些有用的东西,但感觉效率非常低,所以我想知道是否有更好/更易于管理的方法来实现我的目标.

我想用Structs来表示一个企业,但我事先不知道任何特定企业可能会有哪些属性组合.这似乎意味着我必须 for each 可能的参数组合创建一个init().

下面是一个简化的示例(我有更多属性):

import Foundation

struct Business {
    let name : String
    var web : String?
    var address: String?

    // just the business name
    init(busName: String) {
        self.name = busName
    }

    // business name + website
    init(busName: String, website: String) {
        self.name = busName
        self.web = website
    }

    // business name + address
    init(busName: String, address: String) {
        self.name = busName
        self.address = address
    }

    // business name + website + address
    init(busName: String, website: String, address: String) {
        self.name = busName
        self.web = website
        self.address = address
    }
}

然后我可以这样初始化这个类:

Business(busName: "Dave's Cafe", website: "http://www.davescafe.com")

Business(busName: "Sarah's Brewhouse", address: "41 Acacia Ave, Smalltown")

没有办法创建某种init(),其中的参数是可选的吗?如果你能为我指出搜索术语或概念的方向,那就太好了.

推荐答案

使用默认值:

init(busName: String, website: String? = nil, address: String? = nil) {
    self.name = busName
    self.web = website
    self.address = address
}

然后你可以这样调用init:

_ = Business(busName: "Foo")
_ = Business(busName: "Foo", website: "www.foo.bar")
_ = Business(busName: "Foo", address: "bar")
_ = Business(busName: "Foo", website: "www.foo.bar", address: "bar")

Swift相关问答推荐

是否可以将字典项绑定到文本字段?

向文本元素添加背景色失败

如何在visionOS上删除PhotosPicker背景 colored颜色 ?

传递给SWIFT ResultBuilder的闭包中结果类型的对象

SwiftUI轨迹绘制怪异

如何将函数参数(字符串文字)标记为可本地化?

如何为我的项目设置生命周期选项?

将弱引用作为类函数引用传递时,弱引用无法按预期工作

为什么即使 `C` 是一个不是 `Sendable` 的类,Task` 也能工作?

如何在 SceneKit 上制作毛玻璃效果

如何从数据中读取以空结尾的字符串?

如何更新 UserDefault 中的特定值

将内容与工作表顶部而不是中间对齐

SwiftUI Grid 中的数组旋转

不使用 ViewController 时如何显示推送通知的alert 对话框

无法从自定义动态框架(Swift)访问类

在 iOS 中使用 Swift 保存 PDF 文件并显示它们

是 swift 中另一个日期的同一周、月、年的日期

使用相机进行人脸检测

如何使用 Swift 将文本文件逐行加载到数组中?