gpt4 book ai didi

swift - 查找与 OptionSet 的值关联的名称

转载 作者:行者123 更新时间:2023-11-28 05:59:22 25 4
gpt4 key购买 nike

所以我有一个OptionSet:

struct Ability: OptionSet {
let rawValue: Int

static let create = Ability(rawValue: 1 << 0)
static let read = Ability(rawValue: 1 << 1)
static let update = Ability(rawValue: 1 << 2)
static let delete = Ability(rawValue: 1 << 3)

init(rawValue: Int) {
self.rawValue = rawValue
}
}

我这里只是写一个例子。实际上,我的代码并不知道它到底有什么 OptionSet,它只知道它得到了一个 OptionSet。我想要做的是能够从 rawValue 中获取选项的名称作为 String

所以基本上我想编写一个具有以下签名的函数:

func convertOptionToString<OS: OptionSet>(optionSet: OS) -> String

convertOptionToString(Ability.read) 将返回 "read"

当然我知道 OptionSet 也可以包含多个值,但我已经知道我将如何处理这种情况,所以这不是我需要帮助的问题。

我希望可以使用某种智能反射来解决这个问题,但我还没有找到解决方法。有人想试一试吗?

最佳答案

更新您的 struct 以符合 CustomStringConvertible 并实现 description 属性:

struct Ability: OptionSet, CustomStringConvertible {
let rawValue: Int

static let create = Ability(rawValue: 1 << 0)
static let read = Ability(rawValue: 1 << 1)
static let update = Ability(rawValue: 1 << 2)
static let delete = Ability(rawValue: 1 << 3)

init(rawValue: Int) {
self.rawValue = rawValue
}

var description: String {
var vals = [String]()
if self.contains(.create) {
vals.append("create")
}
if self.contains(.read) {
vals.append("read")
}
if self.contains(.update) {
vals.append("update")
}
if self.contains(.delete) {
vals.append("delete")
}

return vals.joined(separator: ",")
}
}

print(Ability.read)
let opts: Ability = [ .read, .delete ]
print(opts)

输出:

read
read,delete

关于swift - 查找与 OptionSet 的值关联的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50294364/

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