一尘不染

在Swift中,“自我”有什么用?

swift

我是Swift的新手,我想知道self它的用途以及原因。

我已经在类和结构中看到了它,但是我真的没有发现它们在我的代码中提到它们是必不可少的。它们的用途是什么?为什么?在什么情况下有必要使用它?

我一直在阅读很多关于该问题的问题和答案,但是没有一个能够完全回答我的问题,而且他们总是倾向于将其与thisJava中的情况进行比较,对此我并不陌生。


阅读 283

收藏
2020-07-07

共1个答案

一尘不染

创建扩展时,您还将经常使用self,例如:

extension Int {
    func square() -> Int {
        return self * self
    }

    // note: when adding mutating in front of it we don't need to specify the return type
    // and instead of "return " whatever
    // we have to use "self = " whatever

    mutating func squareMe() {
        self = self * self
    }
}
let x = 3
let y = x.square()  
println(x)         // 3
printlx(y)         // 9

现在假设您要更改var结果本身,则必须使用mutating func进行更改

var z = 3

println(z)  // 3

现在让它变异

z.squareMe()

println(z)  // 9

//现在来看另一个使用字符串的示例:

extension String {
    func x(times:Int) -> String {
        var result = ""
        if times > 0 {
            for index in 1...times{
                result += self
            }
            return result
        }
        return ""
    }

    // note: when adding mutating in front of it we don't need to specify the return type
    // and instead of "return " whatever
    // we have to use "self = " whatever

    mutating func replicateMe(times:Int){
        if times > 1 {
            let myString = self
            for index in 1...times-1{
                self = self + myString
            }
        } else {
            if times != 1 {
                self = ""
            }
        }
    } 
}


var myString1 = "Abc"
let myString2 = myString1.x(2)

println(myString1)         // "Abc"
println(myString2)         // "AbcAbc"

现在让我们更改myString1

myString1.replicateMe(3)

println(myString1)         // "AbcAbcAbc"
2020-07-07