我试图将自定义类 ChallengeUIElement 用作枚举 ChallengeUIElementType 的rawValue。
因此,我尝试了Xcode想要我做的所有事情,但仍然出现错误消息。开始疼...
无论如何,我遵循了this教程,并得到了许多我不理解的错误消息。
谷歌搜索一段时间后,我发现了一些关于类作为枚举的rawValue类型的stack overflow entries。
但是,我仍然无法使用类类型的枚举。
这是我的代码:
<head>
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/vuetify/dist/vuetify.min.css" rel="stylesheet">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">
</head>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify/dist/vuetify.js"></script>
<div id="app">
<v-app id="inspire">
<v-container grid-list-xl style="background: IndianRed;">
<v-layout text-xs-center row wrap align-center style="height: 100px;">
<v-flex xs4>
<v-card color="success">
Content
</v-card>
</v-flex>
<!–– This guy right here -->
<v-flex xs4>
<v-layout column align-center>
<v-switch prepend-icon="cloud" v-model="enabled"></v-switch>
</v-layout>
</v-flex>
<v-flex xs4>
<v-card color="success">
Content
</v-card>
</v-flex>
</v-layout>
</v-container>
</v-app>
</div>
此外,我不明白为什么可以将RawRepresentable用作this approach的协议,而不能与this one一起使用?
任何帮助将不胜感激。
答案 0 :(得分:1)
您得到的错误主要与错误地声明初始化程序的方式有关。他们实际上与创建具有类原始值的枚举没有太大关系。
由于协议需要您的初始化程序,因此需要将其标记为required
。如果您的班级是final
,则无需执行此操作。因此,要么将类标记为final
,要么将所有初始化程序标记为required
。
这两个便利初始化程序需要标记为convenience
:
public convenience init(unicodeScalarLiteral value: String) {
self.init(stringLiteral: value)
}
public convenience init(extendedGraphemeClusterLiteral value: String) {
self.init(stringLiteral: value)
}
这些是“便利”初始化程序,因为它们调用了类中声明的另一个初始化程序。
此外,public init(stringLiteral value: String)
初始化程序不会初始化所有属性。想想如果if
语句不运行会发生什么。您需要为属性(height
,identifier
和type
)提供一些默认值。