如何向扩展添加另一个级别(像扩展一样分类)
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
}
}
}
我想在扩展中使用一堆类似 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
}
}
}