我是Swift的新手,我想知道self
是用来做什么的,为什么.
我在类和 struct 中见过它,但我真的觉得它们没有必要,甚至没有必要在我的代码中提到它们.它们的用途是什么?为什么?在什么情况下有必要使用它?
我已经阅读了很多关于这个问题的问题和答案,但没有一个完全回答了我的问题,他们总是倾向于将它与Java中的this
个进行比较,我对Java一点都不熟悉.
我是Swift的新手,我想知道self
是用来做什么的,为什么.
我在类和 struct 中见过它,但我真的觉得它们没有必要,甚至没有必要在我的代码中提到它们.它们的用途是什么?为什么?在什么情况下有必要使用它?
我已经阅读了很多关于这个问题的问题和答案,但没有一个完全回答了我的问题,他们总是倾向于将它与Java中的this
个进行比较,我对Java一点都不熟悉.
在创建扩展时,您也会经常使用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结果本身
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"
现在让我们改变我的 idea
myString1.replicateMe(3)
println(myString1) // "AbcAbcAbc"