我是Swift的新手,我想知道self是用来做什么的,为什么.

我在类和结构中见过它,但我真的觉得它们没有必要,甚至没有必要在我的代码中提到它们.它们的用途是什么?为什么?在什么情况下有必要使用它?

我已经阅读了很多关于这个问题的问题和答案,但没有一个完全回答了我的问题,他们总是倾向于将它与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"

现在让我们改变我的想法

myString1.replicateMe(3)

println(myString1)         // "AbcAbcAbc"

Swift相关问答推荐

Vapor Swift 如何配置客户端连接超时

如何使用 Date.ParseStrategy 在 Swift 5.6 中将字符串解析为日期?

Apple 的自然语言 API 返回意外结果

AVPlayer 在 iOS 15.4 中寻求 completionHandler 返回 false

Xcode swift ui 错误“KeyPathComparator”仅在 macOS 12.0 或更高版本中可用

在视图中设置所有变量

VStack SwiftUI 中的动态内容高度

App Tracking Transparency 如何影响显示广告的应用程序? - IDFA iOS14

xcrun:错误:无法找到实用程序“xctest”,不是开发人员工具或 PATH

使用 Swift 包管理器在单元测试中使用资源

我可以将 Xcode 与 iPhone Simulator.app 一起安装在外部硬盘上吗?

在从主线程访问后,不得从后台线程对 > 布局引擎进行修改

在 SwiftUI 中,如何在 UIView 内或作为 UIView 使用 UIHostingController?

SwiftUI 中的几何阅读器是什么?

根据禁用与否更改 SwiftUI 中按钮的 colored颜色

在 SwiftUI 中动态隐藏视图

Swift:“Hashable.hashValue”作为协议要求已被弃用;

DispatchQueue:不能在非主线程上使用 asCopy = NO 调用

如何使关联值相等的 Swift 枚举

设置 statusbarStyle(在 iOS 9.0 中已弃用)