考虑:
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)
有人指点吗?
我有一个名为Field的自定义对象.我基本上用它来定义表单中的单个字段.
class Field {
var name: String
var value: Any?
// initializers here...
}
Run Code Online (Sandbox Code Playgroud)
当用户提交表单时,我验证每个Field对象以确保它们包含有效值.有些字段不是必需的,所以我有时会故意设置nil为这样的value属性:
field.value = nil
Run Code Online (Sandbox Code Playgroud)
当我使用if-let来确定字段是否为零时,这似乎会造成问题.
if let value = field.value {
// The field has a value, ignore it...
} else {
// Add field.name to the missing fields array. Later, show the
// missing fields in a dialog.
}
Run Code Online (Sandbox Code Playgroud)
我在上面的if-else中设置了断点,当field.value故意设置为nil时,它会通过if-let块,而不是else.但是,对于field.value我未初始化和未分配的字段,程序将转到else块.
我想打印出来field.value,并value在IF-让块内:
if let value = field.value {
NSLog("field.value: …Run Code Online (Sandbox Code Playgroud)