如何向扩展添加另一个级别(像扩展一样分类)

How to Add Another Level to an Extension (categorize like extensions)

我想在扩展中使用一堆类似 functions/mutating 的函数,并将它们存储(分类)在一个名称下。所以假设我有这个:

extension Int {

    mutating func addTen() {
        self = self + 10
    }

    mutating func subtractTen() {
        self = self - 10
    }

    mutating func multiplyTen() {
        self = 10 * self
    }

    mutating func divideTen() {
        self = self / 10
    }

}

所以现在如果我想将数字的值增加 10,我可以这样做:

var number : Int = 27
number.addTen() // Now number is equal to 37

但我想做的是将所有这些扩展存储在名称下:myOperations.

所以理想情况下,我想像这样访问我的扩展程序:

var number1 = 20
var number2 = 20
var number3 = 20
var number4 = 20

number1.myOperations.addTen() //change to 30
number2.myOperations.subtractTen() //change to 10
number3.myOperations.multiplyTen() //change to 200
number4.myOperations.divideTen() //change to 2 

我试图通过这样做来完成这个:

extension Int {

    struct myOperations {

        mutating func addTen() {
            self = self + 10
        }

        mutating func subtractTen() {
            self = self - 10
        }

        mutating func multiplyTen() {
            self = 10 * self
        }

        mutating func divideTen() {
           self = self / 10
        }
    }
}

但是我得到了错误:Binary operator '+' cannot be applied to operands of type 'Int.myOperations' and 'Int'

如何将所有分机放在一个名为:myOperations?

的分组中

请注意,Swift 以大写字母开头命名结构是惯例。如果你想改变整数,你需要一个方法而不是一个结构并让它发生变化。关于您的操作,您需要的是一个枚举并将其传递给您的变异方法。它看起来像这样:

number1.operations(.addTen)

extension Int {
    enum Operation {
        case addTen, subtractTen, multiplyTen, divideTen
    }
    mutating func operations(_ operation: Operation) {
        switch operation {
        case .addTen:
            self += 10
        case .subtractTen:
            self -= 10
        case .multiplyTen:
            self *= 10
        case .divideTen:
            self /=  10
        }
    }
}