【发布时间】:2019-12-10 21:40:59
【问题描述】:
我对协议不是很好,现在我很困惑。我正在尝试为具有name 属性(或需要的函数)的enum 制定协议。
这将允许我获取枚举值的名称,类似于单独遵守String,但首字母大写。例如,我想要发生的事情:
enum Furniture: Named {
case table, chair, lamp
}
Furniture.table.name // Returns 'Table'
Furniture.chair.name // Returns 'Chair'
Furniture.lamp.name // Returns 'Lamp'
这是我目前所拥有的:
protocol Named {
var name: String { get }
}
extension Named where Named: String {
var name: String {
let str: String = self.rawValue
return str.prefix(1).uppercased() + str.dropFirst()
}
}
这给了我错误,当我尝试更正它们时,会弹出另一个错误。
现在,这显示了以下错误:
类型“命名”被限制为非协议、非类类型“字符串”
“Self”类型的值没有成员“rawValue”
我该如何解决这个问题?
【问题讨论】:
-
String 上没有
.capitalized()吗? -
@Alexander-ReinstateMonica 没意识到,谢谢!我从here 得到了那部分,前两个答案是使用这种方法(即使他们说它是针对 Swift 5 的)。
-
这对不能
import Foundation的人来说会很好
标签: swift enums swift-protocols swift-extensions