ios - 使用可选的存储属性快速初始化结构

标签 ios swift

我是 Swift 新手,我正在尝试使用具有可选属性的结构。我进行了相当多的搜索并得到了一些有用的东西,但感觉效率极低,所以想知道是否有更好/更易于管理的方法来实现我的目标。

我想使用 Structs 来表示一个企业,但我事先不知道任何特定企业可能具有哪些属性组合。这似乎意味着我必须为每个可能的参数组合创建一个 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")

关于ios - 使用可选的存储属性快速初始化结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37553626/

相关文章:

swift - 排序方法如何在 Swift 中反向工作?

swift - 如何在 `NSURLSession` 超时时显示错误并终止应用程序?

swift - 捕获立体声音频数据

iphone - iOS 应用程序 : Is there a life after crash and termination?

ios - 如何在 iOS 中更改部分透明图像的颜色?

iOS插入数据库

ios - 为什么 iOS 17 WidgetKit 中的交互式按钮在应用程序运行时不调用 AppIntent Perform()?

ios - 清除 xCode 中静态 Int 的未使用实体警告

ios - 多个 UIswitches 一个随机按钮

ios - 无法执行存储在 Array[Any] 中的对象的方法