相关疑难解决方法(0)

如何在switch语句之外访问Swift枚举关联值

考虑:

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)

有人指点吗?

enums swift

48
推荐指数
5
解决办法
2万
查看次数

Swift如果让我们成功评估Optional(nil)

我有一个名为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)

cocoa cocoa-touch optional ios swift

5
推荐指数
1
解决办法
4170
查看次数

标签 统计

swift ×2

cocoa ×1

cocoa-touch ×1

enums ×1

ios ×1

optional ×1