self 与 Self

简单说说 Swift 中的 self 和 Self。
总结下就是:
self 是在实例方法或闭包中引用当前实例的关键字。
Self 是在协议中引用遵循该协议的类型本身的关键字。

self:在一个实例方法或闭包中,self 是一个特殊的关键字,用于引用当前实例。它指代当前实例对象,可以用于访问和操作实例的属性、方法和下标等成员。

class MyClass {
    var name: String

    init(name: String) {
        self.name = name
    }

    func printName() {
        print("My name is \(self.name)")
    }
}

let obj = MyClass(name: "John")
obj.printName() // 输出 "My name is John"

在上述示例中,self.name 引用了类中的属性 name,而 self 代表当前实例自身。

Self:在协议中,Self 是一个特殊的关键字,用于引用遵循该协议的类型本身。它以大写字母开头,表示类型本身,而不是特定的实例。

protocol Printable {
    static func printSomething()
}

class MyClass: Printable {
    static func printSomething() {
        print("Printing something")
    }
}

MyClass.printSomething() // 输出 "Printing something"

在上述示例中,Self 用作协议 Printable 中的关联类型,它表示遵循该协议的实际类型(例如 MyClass)。在协议中,Self 表示实际实现该协议的类型。

常用例子就是如果在一个类中定义了静态属性和方法,静态属性和静态方法是直接属于类本身,所以在内部可以直接使用 Self 来调用,在外部则使用类名调用。

class Student {
    static var myAge = 20

    static func printAge() {
        print(Self.myAge)
    }
}

Student.printAge() // 输出 20

你可能感兴趣的:(swiftios)