1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Swiftのself keywordとは?

Posted at

selfとは?

公式によると...

self プロパティ
ある型のすべてのインスタンスは、selfと呼ばれる暗黙のプロパティを持つ。selfプロパティは、インスタンスメソッド内で現在のインスタンスを参照するために使用します。

上の例のincrement()メソッドは、次のように書くことができる:

func increment() {
    self.count += 1
}

実際には、コードに self を書く必要はあまりありません。明示的に self を書かない場合、Swift は、メソッド内で既知のプロパティまたはメソッド名を使用するときはいつでも、現在のインスタンスのプロパティまたはメソッドを参照していると仮定します。この仮定は、Counterの3つのインスタンスメソッド内で(self.countではなく)countを使用することで実証されています。

このルールの主な例外は、インスタンス・メソッドのパラメータ名がそのインスタンスのプロパティと同じ名前の場合に発生する。この状況では、パラメータ名が優先され、より修飾された方法でプロパティを参照する必要が生じます。パラメータ名とプロパティ名を区別するには、selfプロパティを使用します。

ここでは、selfがxというメソッド・パラメータと、同じくxというインスタンス・プロパティを区別している:

struct Point {
    var x = 0.0, y = 0.0
    func isToTheRightOf(x: Double) -> Bool {
        return self.x > x
    }
}
let somePoint = Point(x: 4.0, y: 5.0)
if somePoint.isToTheRightOf(x: 1.0) {
    print("This point is to the right of the line where x == 1.0")
}
let p = Point()
// 実行結果:
// This point is to the right of the line where x == 1.0

テキストを参照して表示する例だとこんな感じですね。

import UIKit

// selfキーワードは、コードが属するインスタンスを参照するのと同じように機能します。
class Employee {
    var name = "Undefined"
    
    func changedeName(name: String) {
        self.name = name
    }
}
let employee1 = Employee()
// この例のselfキーワードは、employee1変数に格納されているオブジェクトへの参照です。
employee1.changedeName(name: "Monica")

print("Name: \(employee1.name)")// Name: Monica

まとめ

self keywordの役割は、クラスと構造体の中で定義しているプロパティを参照する目的で使用するキーワードです。他の言語だったらthisですかね。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?