如何在扩展中使用Swift返回Int中的变异函数?

iel*_*ani 5 swift

为什么这段代码不起作用?

protocol ExampleProtocol {
    var simpleDescription: String { get }
    mutating func adjust()
}
extension Int: ExampleProtocol {
    var simpleDescription: String {
    return "The number \(self)"
    }
    mutating func adjust() {
        self += 42
    }
}
var x:Int = 7
let y:Int = x.adjust()
Run Code Online (Sandbox Code Playgroud)

这是我在XCODE上得到的

在此输入图像描述

有没有办法让adjust()返回Int而不改变协议中的定义?

Con*_*nor 6

是的,您可以给出调整返回值.定义它以在协议和类中返回Int,然后让它在变异方法中返回:

protocol ExampleProtocol {
    var simpleDescription: String { get }
    mutating func adjust() -> Int
}
extension Int: ExampleProtocol {
    var simpleDescription: String {
    return "The number \(self)"
    }
    mutating func adjust() -> Int {
        self += 42
        return self
    }
}
var x:Int = 7
let y:Int = x.adjust() //49
Run Code Online (Sandbox Code Playgroud)

  • 您不必更改协议,但如果您想要返回值,则必须使用返回值来实现该方法。如果实现的方法和协议定义的方法没有相同的参数和返回值,它仍然可以工作,但不会被认为是正确实现了协议 (3认同)

tes*_*nes 5

因为 adjust() 函数不返回值(它只是改变其实例的值),您可以通过以下命令实现:

var x:Int = 7
x.adjust() //adjust x self value
let y:Int = x //assigne x value to y
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。