是否可以使用原始值类型的闭包在Swift中创建Enum?

Zhe*_*eng 14 enums swift

当我尝试使用代码时,我遇到了一些错误.

enum Operate: ((Double, Double) -> Double) = {
    case Plus = {$1 + $0}
    case Minus = {$1 - $0}
    case Multiply = {$1 * $0}
    case Divide = {$1 / $0} 
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用原始值类型的闭包在Swift中创建Enum?谢谢.

ABa*_*ith 7

正如@Pang所说,只有字符串,字符或任何整数的浮点数类型都可以用作原始类型.但是,您可以使用以下方法实现类似的功能struct:

struct Operate {
    typealias OperationType = (Double, Double) -> Double

    static let Plus : OperationType = { $0 + $1 }
    static let Minus: OperationType = { $0 - $1 }
    // ...
}

let plus = Operate.Plus
plus(1.0, 2.0) // 3.0
Run Code Online (Sandbox Code Playgroud)


Gri*_*mxn 5

另一种可能的方法,但使用enum:

typealias TwoOp = (Double, Double) -> Double

enum Operate {

    case Plus, Minus // etc...

    var op: TwoOp {
        get {
            switch self {
            case .Plus:
                return {$1 + $0}
            case .Minus:
                return {$1 - $0}
            }
        }
    }
}

let opPlus = Operate.Plus
let answerP = opPlus.op(3, 2)
let opMinus = Operate.Minus
let answerM = opMinus.op(3, 2)
Run Code Online (Sandbox Code Playgroud)