具有相同原始值的多个枚举

问题描述 投票:-1回答:2

以下 this 教程

我已经定义了在我的应用中使用自定义字体的结构,但是我收到一个奇怪的错误枚举大小写的原始值不是唯一的基本上,我尝试使用相同的rawValue进行多个枚举]

我的代码如下

struct FontManager {

    enum Font: String {
        case customBlack = "CustomFont-Black"
        case customBold = "CustomFont-Bold"
        case customMedium = "CustomFont-Medium"
        case customRegular = "CustomFont-Regular"

        enum Size: CGFloat {
            case navTitle = 20
            case drawerListItemBadgeActiveFont = 10
            case drawerHeaderTitle, formFiled = 16
            case drawerHeaderSubTitle, drawerListItemActive, drawerListItemInActive = 14
            case drawerHeaderEndText, formLabel = 12
            case sampleCase = 18    
        }

        func font(size:Size) -> UIFont {
            let fontSize = size.rawValue
            let fontName = self.rawValue
            return UIFont(name: fontName, size: fontSize)!
        }
    }
}

This is image of error

对于任何随机数15、17、18,我都会收到这些错误请建议我该如何解决]

ios enums swift4
2个回答
0
投票
当您根据数字(为drawerHeaderTitledrawerHeaderSubTitledrawerListItemActivedrawerHeaderEndText完成的操作)省略枚举案例的显式值时,编译器将自动增加前一个案例的值并将其分配给新案例。因此,您真正拥有的是:

case navTitle = 20 case drawerListItemBadgeActiveFont = 10 case drawerHeaderTitle /* = 11 */ case formFilled = 16 case drawerHeaderSubTitle /*= 17 */ case drawerListItemActive /*= 18*/ case drawerListItemInActive = 14 case drawerHeaderEndText /*= 15*/ case formLabel = 12 case sampleCase = 18 /* Duplicates drawerListItemBadgeActiveFont */

我不清楚您在这里要使用的未分配值是什么,但是请记住,每种情况

必须都有唯一的值。如果这是您的意图,则不能将drawerHeaderTitle formFiled都分配给16。


0
投票
在Swift中,具有Raw值的枚举应具有唯一的值(让我们假设您将启动Size(rawValue:CGFloat),但此值有两种情况-是吗?)。您可以改用几个选项-其中一个只是添加计算属性,而不使用原始值:

enum Size { case navTitle, drawerHeaderTitle, formFiled ... .... var value: CGFloat { switch self: case navTitle: return 20 case drawerHeaderTitle: fallthrough case formFiled: return 26 ... } }

© www.soinside.com 2019 - 2024. All rights reserved.