作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在 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/
我是一名优秀的程序员,十分优秀!