gpt4 book ai didi

swift - 是否建议在 "extension String"中存储常量 String

转载 作者:搜寻专家 更新时间:2023-11-01 06:02:35 24 4
gpt4 key购买 nike

我正在实现一个 Alamofire 路由器。我想为每个 api 管理我的常量 url。通常我会创建一个 struct 来存储它们,如下面的代码:

private struct API {
static let foo = "domain/models/foo"
static let bar = "doamin/models/bar"
}

但最近我发现它也可以在 String 扩展中实现,比如

private extension String {
static let foo = "domain/models/foo"
static let bar = "doamin/models/bar"
}

这样一来,我用起来就更方便了。喜欢

// from
let urlFromStruct: String = API.foo

// to
let urlFromExtension: String = .foo

因为扩展 String 意味着常量成为 String 的静态属性。如果我不省略 String,代码将变成

let urlFromExtension: String = String.foo

并防止这些常量在其他文件中被访问。我用私有(private)声明扩展。

所以我想知道是否推荐使用extension方式来实现?或任何其他建议表示赞赏。

最佳答案

不,这真的不推荐。即使您存储的值的类型是字符串,这些值与 String 类没有逻辑联系,因此在我看来将它们添加为类型属性不是一个好主意。

这些 API 端点仅连接到您的业务逻辑,因此即使您将它们声明为 private,它们也应该存储在仅与您的业务逻辑相关的类型中,而不是“通用”类型。

将端点存储在 enum 而不是 structclass 中也是一个好主意。

private enum API {
static let foo = URL(string: "domain/models/foo")!
static let bar = URL(string: "domain/models/bar")!
}

关于swift - 是否建议在 "extension String"中存储常量 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45284898/

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