gpt4 book ai didi

swift - 符合 RawRepresentable 的枚举

转载 作者:可可西里 更新时间:2023-11-01 00:27:15 35 4
gpt4 key购买 nike

在 Swift 书中,枚举的例子很好用

enum CompassPoint: String {
case north, south, east, west
}

var northCom = CompassPoint.north
print (northCom)

但是我想使用一个可失败的初始化器,所以做了一个例子

enum WeekDay: String {
case monday, tuesday, wednesday, thursday, friday
init?(rawValue: Int){
switch rawValue {
case 0 : self = .monday
case 1 : self = .tuesday
case 2 : self = .wednesday
case 3 : self = .thursday
case 4 : self = .friday
default : return nil
}
}
}

并得到一个错误,Weekday does not conform to RawRepresentable - 虽然我觉得一致性应该由编译器合成,所以不明白为什么这不编译。

我做了什么 创建了一个类似的工作示例(以查看问题所在),但我仍然想使用带有可失败初始化程序的枚举来符合 RawRepresentable。我无法在 Swift 书籍、Stack Overflow 问题或更广泛的互联网上找到这方面的示例。

我提供的内容给出上面的完整示例,包括错误以及我期望的行为的工作示例。

什么没有帮助 通过链接或评论引用 Swift 书没有帮助,因为我从那里举了一个例子。我想在那个例子的基础上建立一个可失败的初始化器。不使用枚举或可失败的初始化程序也没有帮助。问题是关于使用带有枚举的可失败初始化器,并符合 RawRepresentable。这不是家庭作业,但这些是我自己学习的问题的限制条件,我对结果很感兴趣。

问题我如何使用可失败的初始化器,在非工作示例中使用枚举?

最佳答案

显然,您对 init?(rawValue: Int) 的定义阻止了编译器自动推断 RawValue 类型。添加类型别名有助于:

enum WeekDay: String {
typealias RawValue = String

case monday, tuesday, wednesday, thursday, friday

init?(rawValue: Int){
switch rawValue {
case 0 : self = .monday
case 1 : self = .tuesday
case 2 : self = .wednesday
case 3 : self = .thursday
case 4 : self = .friday
default : return nil
}
}
}

或者使用不同的参数名称定义您的自定义初始化函数:

enum WeekDay: String {

case monday, tuesday, wednesday, thursday, friday

init?(rawInt: Int){
switch rawInt {
case 0 : self = .monday
case 1 : self = .tuesday
case 2 : self = .wednesday
case 3 : self = .thursday
case 4 : self = .friday
default : return nil
}
}
}

关于swift - 符合 RawRepresentable 的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55489682/

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