swift - 快速省略命名空间
问题描述
我有一个问题要在 swift 中省略命名空间
struct Constant {
static let loginAPI: String = "login"
static let signUpAPI: String = "signup"
}
class Network {
var api: String
init(api: String) {
self.api = api
}
}
var network = Network(api: Constant.loginAPI)
而不是使用Constant.loginAPI
我只想使用.loginAPI
. 这怎么可能?
解决方案
您可以enum
改用:
enum API: String {
case login = "login"
case signUp = "signup"
}
class Network {
let api: API
init(api: API) {
self.api = api
}
}
let network = Network(api: .login)
并且,当Network
需要字符串值时,可以使用api.rawValue
. 或者,如果您真的不需要这些字符串,您可以进一步简化它:
enum API {
case login
case signUp
}
虽然我认为上述enum
是尝试指定一系列预定值中的一个时的自然模式,但值得注意的是,您可以通过以下方式实现类似的效果struct
:
struct API {
let value: String
static let login = API(value: "login")
static let signUp = API(value: "signup")
}
class Network {
var api: API
init(api: API) {
self.api = api
}
}
let network = Network(api: .login)
并且,在这种情况下,Network
可以访问api.value
以检索字符串值。
但是,使用这种struct
方法,没有什么可以阻止某人做一些可能无效的事情,例如:
extension API {
static let foo = API(value: "bar")
}
let network = Network(api: .foo)
或者直接做:
let network = Network(api: API(value: "baz"))
struct
因此,只有在动态添加值可能有意义的情况下,您才会使用此模式。例如,在使用 时NotificationCenter
,最好创建自己的Notification.Name
静态值,因为可以发布和观察自己的自定义通知,但您仍然可以使用方便的语法。
所有这些都说了,在这种情况下,枚举是自然的解决方案。
推荐阅读
- c# - 如何从 JSON 数据创建 treeView
- batch-file - 如何在 SSH 连接到服务器后设置 bat 文件的延迟?
- javascript - 使用 csv 解析包 Node.js 解析 csv
- c# - 使用相同的内存位置多次实例化类
- react-native - 如何在屏幕底部定位组件
- r - 在 ggplot2 的 annotate_custom 中指定 x 和 y 坐标
- node.js - Cannot test an async method that is expected to throw
- sql - IGNORE“列被多次指定”CTE
- z3 - Dafny 函数,while 循环中的逻辑表达式无效
- react-google-maps - 如何在 react-google-maps 中使用 DirectionsService 之外的可变路线?