4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

iOSAdvent Calendar 2023

Day 5

本当に理解している?selfとSelfの違い!

Posted at

selfとSelfとは?

selfとは?

型の内部のプロパティやメソッドなどの中ではselfキーワードを通じてインスタンス自身にアクセスできます!

self.playground
class Person {
    let personName = "ひなっこ"
    func sayName() {
        print(self.personName)
    }
}

Selfとは?

型の内部のプロパティやメソッドなどの中ではSelfキーワードを通じて型自身にアクセスできます!
Selfキーワードを使うと、型自身に紐づくメンバーであるstaticメソッド、staticプロパティにアクセスできる。
インスタンス化してない状態でアクセスできます!

Self.playground
class Person {
    static let raceName = "日本人"
    func sayName() {
        print("私は\(Self.raceName)です。")
    }
}

selfとSelfの違いを見てみる!

理解を深めるためにPlaygroundで動かしてみてください!

Swift.playground
class Person {
    static let raceName = "日本人"
    let name: String
    init(name: String) {
        self.name = name
    }

    func sayMyName() {
        print("私の名前は\(self.name)です。私は\(Self.raceName)です。")
        //🟩SelfはPersonに置き換え可能
        //print("私の名前は\(self.name)です。私は\(Person.raceName)です。")
    }
}
//🟥エラー:Cannot find 'hinakko' in scope
//print(hinakko.name)
print(Person.raceName)//日本人


func f() {
    let hinakko = Person(name: "ひなっこ")
    hinakko.sayMyName()//私の名前はひなっこです。私は日本人です
    print(hinakko.name)//ひなっこ
    print(Person.raceName)//日本人
}

f()

Playgroundで動かしてみると、
🟥エラー:Cannot find 'hinakko' in scopeの下のprint(hinakko.name)でエラーが起こります!
インスタンス化されていないため、エラーになります!
一つ下のprint(Person.raceName)は型に紐づいているため、正常にprintされます。

そのため、sayMyNameメソッドのprint("私の名前は(self.name)です。私は(Self.raceName)です。")
🟩Selfは型自身にアクセスするため、Personに置き換え可能
❌selfはインスタンス自身にアクセスするので、Personに置き換えは不可

参考文献

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?