在同一个枚举函数中调用 Swift 枚举案例

Posted

技术标签:

【中文标题】在同一个枚举函数中调用 Swift 枚举案例【英文标题】:Call Swift enum case within same enum function 【发布时间】:2020-06-02 20:44:11 【问题描述】:

我正试图深入了解 Swift 枚举,并通过尝试从同一个枚举中的函数返回一个字符串来让自己脱离教程轨道...

enum topFiveBands: Int 
    case led_zeppilin = 1, queen, rush, pink_floyd, acdc

    func printRating() 
        print("The band \(???) has been ranked no.\(self.rawValue) of all time")
    


var myFavBand = topFiveBands.acdc
myFavBand.printRating()

我的代码以一个隐式赋值开始,它列出了所有时间的前 5 个乐队(你们中的一些人可能不同意我的观点......)。在同一个枚举中,我有一个将打印的函数:

The band \(???) has been ranked no.\(self.rawValue) of all time

我选择了.acdc,所以我正在寻找要返回的函数:

The band acdc has been ranked no.5 of all time

虽然我可以提取 rawValue (5),但我似乎找不到将 acdc 放入字符串的方法。

【问题讨论】:

【参考方案1】:

只需使用self:

func printRating() 
    print("The band \(self) has been ranked no.\(self.rawValue) of all time")

self 是对其自身值的引用,在本例中为 acdc

【讨论】:

您和 Emilio 的回答都如愿以偿。谢谢你。给 Emilio 的绿色勾号,因为我可以大写乐队名称(怪我的强迫症:))【参考方案2】:

虽然您可以使用 self,但我建议您不要这样做,因为使用 enum 名称时您有一些限制,例如必须使用 pink_floyd

相反,我建议添加一个 String 属性,该属性根据 enum 的值返回显示名称

var displayName: String 
    switch self 
    case .pink_floyd: return "Pink Floyd"
    case ...: // The rest
    


func printRating() 
    print("The band \(displayName) has been ranked no.\(rawValue) of all time")

【讨论】:

以上是关于在同一个枚举函数中调用 Swift 枚举案例的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4.2 - 如何在枚举函数中使用警报?

Swift函数式编程七(枚举)

Swift函数式编程七(枚举)

如何将枚举案例传递给使用“if case”检查属性案例的函数

使用枚举参数自动生成的 Swift 扩展函数

Swift - 1 (常量变量字符串数组字典元组循环枚举函数)