相关疑难解决方法(0)

在Swift中访问枚举关联值

在这段代码中,我写了一个非常无用的枚举,Number用Int或Float 定义了一个可能的.

我无法理解如何访问我使用关联设置的值.如果我尝试打印它,我会得到(Enum Value)

enum Number {
    case int (Int)
    case float (Float)
}

let integer = Number.int(10)
let float = Number.float(10.5)
println("integer is \(integer)")
println("float is \(float)")
Run Code Online (Sandbox Code Playgroud)

swift

52
推荐指数
7
解决办法
3万
查看次数

无论枚举情况如何,如何获得快速枚举的相关值

我有一个对象FormField,它有两个属性:一个String name,一个value可以接受任何类型的东西 - 因此我已经成功了Any!.但是,我在一个单独的问题中被告知要使用带有相关值的枚举而不是Any!.

enum Value {
    case Text(String!)
    case CoreDataObject(NSManagedObject!)
}

class FormField {
    var name: String
    var value: Value?
    // initializers...
}
Run Code Online (Sandbox Code Playgroud)

然而,这种方法使得检查无效非常冗长.如果我想显示表单中所有缺少字段的警报视图,我将不得不对switch语句中的每个案例重复nil检查:

for field in self.fields {
    if let value = field.value {
        switch value {
        case .Text(let text):
            if text == nil {
                missingFields.append(field.name)
            }
        case .CoreDataObject(let object):
            if object == nil {
                missingFields.append(field.name)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

无论类型如何,是否有更短的方式来访问枚举的相关值?如果我创建FormField.value Any!,上面的代码就像下面这样简单:

for field in self.fields {
    if …
Run Code Online (Sandbox Code Playgroud)

cocoa cocoa-touch ios swift

17
推荐指数
2
解决办法
7840
查看次数

我应该如何使用Swift Enums实现默认关联值?

Swift问题是有一种方法可以使用一个具有相关值的案例的枚举类型.

我有一个API,它提供了可用的过滤器,它不太可能,但API可能会添加其他过滤器类型.因此,如果API发送未知的过滤器类型,我希望保留与枚举相关联的信息.

以下是我对此做出的不同想法.

我的前两次尝试没有编译.我的第三次尝试感觉有点笨重.

有没有人有更好的方法这样做?你认为我不应该使用enum来解决这个问题吗?

typealias APIFilterIdentifier = String

/* Does Not Compile */
enum EnumTestAssociatedValeu: APIFilterIdentifier {
    case Unknown(APIFilterIdentifier)
    case Everyone = "everyone"
    case Team = "myteam"
}

/* Does not compile */
enum EnumTestDefaultAssociatedValues: APIFilterIdentifier {
    case Unknown(APIFilterIdentifier)
    case Everyone(APIFilterIdentifier = "everyone")
    case Team(APIFilterIdentifier = "myteam")
}

/* Compiles but is there a better way? */
enum EnumTestWithCustomInit {

    case Unknown(APIFilterIdentifier)
    case Everyone
    case Team

    init(filterIdentifier: APIFilterIdentifier) {
        let everyone: APIFilterIdentifier = EnumTestWithCustomInit.everyoneFilterIdentifier
        let team: APIFilterIdentifier = EnumTestWithCustomInit.teamFilterIdentifier …
Run Code Online (Sandbox Code Playgroud)

enums swift

11
推荐指数
1
解决办法
3122
查看次数

标签 统计

swift ×3

cocoa ×1

cocoa-touch ×1

enums ×1

ios ×1