swift - 如何将枚举用于类函数
问题描述
我正在做一个项目,我创建了一个类来处理 json 响应以将其转换为模态类,并在需要时将其更改回带有更新数据的 json 请求。
在课堂上,我正在从字典中获取值并将其保存到字典中。我需要为字典键创建一个枚举,以便复杂键格式出错的机会更少。
我什至尝试使用like
enum Fields {
case Name
case Email
}
但是 Fields.Email 返回 Fields 对象
如果我使用一个变量的协议,比如
protocol someProtocol {
var name: String { get }
}
extension someProtocol {
var name:String {
return String(describing: self)
}
}
然后扩展enum Fields:someProtocol
然后我可以像使用它一样Fields.name.name or Fields.email.name
但是我的客户不会批准这个我想创建一个枚举,这样我就可以直接访问字符串,就像我想要键“Name”一样,我应该得到它,比如“Fields.name”或“.name”
所以在这里我有两个目标
- 首先,我需要创建可以通过类函数访问的东西
- 其次它应该是通用的,以便我可以将它与多个类一起使用
- 第三,我可以用更少的操作员访问它
——</p>
class PersonService {
class Update {
var name = ""
var email = ""
var personId = 0
func createDataFrom(dic:[AnyHashable : Any]) -> Update {
let update = Update()
update.name = dictionary["Name"]
update.email = dictionary["Email"]
update.personId = dictionary["Id"]
return update
}
func createDataTo() -> [AnyHashable:Any] {
var ret = [AnyHashable : Any]()
ret["Name"] = name
ret["Email"] = email
ret["Id"] = personId
return ret
}
}
}
解决方案
类似的东西?
enum Fields: String {
case Name = "Name"
case Email = "Email"
}
Print(Fields.Name.rawValue)
result: "Name"
或者
struct Constants {
static let name = "Name"
static let email = "Email"
}
print(Constants.name)
result: "Name"
推荐阅读
- ruby - 在 `+' 中:没有将 nil 隐式转换为 String (TypeError)
- javascript - 在 JavaScript 中将 JSON 对象转换为数组
- python - python:如何根据名称对 glob.list 中的元素进行排序?
- python - LSTM InvalidArgumentError
- angular - 当我将值从复选框传递给模式时,我得到了未定义
- hybris - Hybris 中类别的目录同步失败
- python - 如何一次打开多个包含测试用例的 .json 文件?
- python - 无替换的随机过采样
- hugo - 不支持带有协议 (http) 的 hugo URL
- javascript - 如何控制触发鼠标滚轮事件的时间间隔