gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 12:07:43 25 4
gpt4 key购买 nike

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

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
}
}
}

但我收到错误:二元运算符“+”不能应用于“Int.myOperations”和“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
}
}
}

关于swift - 如何向扩展添加另一个级别(像扩展一样分类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49101779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com