考虑:
enum Line {
case Horizontal(CGFloat)
case Vertical(CGFloat)
}
let leftEdge = Line.Horizontal(0.0)
let leftMaskRightEdge = Line.Horizontal(0.05)
Run Code Online (Sandbox Code Playgroud)
如何在lefEdge不使用switch语句的情况下直接访问相关值?
let noIdeaHowTo = leftEdge.associatedValue + 0.5
Run Code Online (Sandbox Code Playgroud)
这甚至没有编译!
我看了一下这些 SO 问题,但没有一个答案似乎解决这个问题.
noIdeaHowTo上面的非编译行应该是单行,但由于associated value可以是任何类型,我甚至无法看到用户代码如何在le enum本身中编写"泛型"get或associatedValue方法.
我最终得到了这个,但它很严重,每次我添加/修改案例时都需要我重新访问代码...
enum Line {
case Horizontal(CGFloat)
case Vertical(CGFloat)
var associatedValue: CGFloat {
get {
switch self {
case .Horizontal(let value): return value
case .Vertical(let value): return value
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
有人指点吗?
我有一个enum:
public enum PersonType:String {
case Cool = "cool"
case Nice = "rude"
case SoLazy = "so-lazy"
public var description: String {
switch self {
case .Cool:
return "Cool person"
case .Nice:
return "Nice person"
case .SoLazy:
return "its so lazy person"
}
}
public var typeImage: String {
switch self {
case .Cool:
return "cool.png"
case .Nice:
return "img_nice.png"
case .Solazy:
return "lazy.png"
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题我不知道所有的人类型键,所以我需要处理类型为人的默认情况,并给它描述将是它的关键像"so-lazy"和默认图像.
假设我从Web服务获得此结果:
[
{
name: "john",
key: "cool"
},
{
name: …Run Code Online (Sandbox Code Playgroud)