Swiftの「自分」の目的は何ですか

therealManUtdFan

私は Swift で「自己」に関する多くの出版物を読み、その要点を把握し始めていますが、まだ不明な点が 1 つあります。

class Car {
  // 1
  let make: String
  // 2
  private(set) var color: String
  init() {
    make = "Ford"
    color = "Black"
  }
  required init(make: String, color: String) {
    self.make = make
    self.color = color
  }
// 3
  func paint(color: String) {
    self.color = color
  }
}

let car = Car(make: "Tesla", color: "Red")
car.paint("Blue")

上記の例を参考にして、私の主張を証明しようとしています。

私が読んだいくつかの出版物は、それselfが init() からの「color」とパラメータの「color」を区別するために使用されていることを示していますfunc paint(color: String)

では、「セルフカラー」が に設定されているfunc paint(color: String)場合、それはどの「カラー」を参照していますか? の 'color'init()またはfunc paint(color: String)?のパラメーターからの色

デルティックス

self コードが実行されているクラスの現在のインスタンスへの参照です。

initメソッドとメソッドの両方で、パラメーターで渡された値を使用して名前が付けられpaintメンバー変数colorを、 とも呼ばれるメソッドに設定することを指定できますcolor

paintこの方法は、渡されたパラメータに参照することができないinitすべての(またその逆)にします。

したがって、サンプル コードでは、両方のメソッドcolorがオブジェクトの を、パラメーターとしてメソッドに渡される指定された値に設定します。

このinitメソッドは、オブジェクトの初期色を設定します。

このpaintメソッドを使用すると、オブジェクトの色をその初期色から変更できます

パラメータの名前が単純に異なる場合、これはより明確になる可能性があります。たとえば、次のようになります。

required init(initialMake: String, initialColor: String) {
  self.make = initialMake
  self.color = initialColor
}

func paint(newColor: String) {
  self.color = newColor
}

この場合、関数はメンバーメソッドであるselfため、コンパイラーは、その名前を持つ他の変数またはパラメーターがないため、呼び出されるメンバーのみを意味colorできると認識しているため、完全にオプションです。つまり、メソッドは次のように簡単に記述できます。colorpaint

func paint(newColor: String) {
  color = newColor
}

これはまったく同じ動作になります。

ただし、self厳密には必要とされない場合でも、明確にするためにプレフィックスを保持することを好む人もいます。これは、意図を明確にするだけでなく、変数またはメンバー名が変更された場合に偶発的な間違いを避けるのに役立つためです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

「for(;;)」の目的は何ですか

分類Dev

「?」の目的は何ですか?

分類Dev

SwiftのwillSetとdidSetの目的は何ですか?

分類Dev

SwiftのFloat.addProductの目的は何ですか?

分類Dev

RxJavaのdoOnNext(...)の目的は何ですか

分類Dev

DockerfileのVOLUMEの目的は何ですか

分類Dev

Makefileの.PHONYの目的は何ですか?

分類Dev

UIViewのautoresizingMaskの目的は何ですか?

分類Dev

Bootstrapの.rowの目的は何ですか?

分類Dev

NodeJSのmain()の目的は何ですか?

分類Dev

CountDownLatchのawait()の目的は何ですか?

分類Dev

msbuildのGenerateRuntimeConfigurationFilesの目的は何ですか?

分類Dev

GeofencingRequestの `setInitialTrigger`の目的は何ですか?

分類Dev

typescriptの__awaiterの目的は何ですか

分類Dev

ApplicativeFunctorの「pure」の目的は何ですか

分類Dev

JasmineのbeforeAll()の目的は何ですか?

分類Dev

EGitの「SwitchTo」の目的は何ですか?

分類Dev

Clojureの#_の目的は何ですか?

分類Dev

Scalazの*>と<*の目的は何ですか

分類Dev

reactbootstrapのcomponentClasspropの目的は何ですか

分類Dev

OracleSQLの/ * + * /の目的は何ですか?

分類Dev

JpaTransactionManagerのsetNestedTransactionAllowedの目的は何ですか

分類Dev

curdocの目的は、()とは何ですか?

分類Dev

BeginFormで@usingの目的は何ですか

分類Dev

/ etc / hostsの目的は何ですか?

分類Dev

/ etc / defaultの目的は何ですか?

分類Dev

ssh-agentの目的は何ですか?

分類Dev

「pip install --user ...」の目的は何ですか?

分類Dev

「a and a or b」の目的は何ですか?

Related 関連記事

  1. 1

    「for(;;)」の目的は何ですか

  2. 2

    「?」の目的は何ですか?

  3. 3

    SwiftのwillSetとdidSetの目的は何ですか?

  4. 4

    SwiftのFloat.addProductの目的は何ですか?

  5. 5

    RxJavaのdoOnNext(...)の目的は何ですか

  6. 6

    DockerfileのVOLUMEの目的は何ですか

  7. 7

    Makefileの.PHONYの目的は何ですか?

  8. 8

    UIViewのautoresizingMaskの目的は何ですか?

  9. 9

    Bootstrapの.rowの目的は何ですか?

  10. 10

    NodeJSのmain()の目的は何ですか?

  11. 11

    CountDownLatchのawait()の目的は何ですか?

  12. 12

    msbuildのGenerateRuntimeConfigurationFilesの目的は何ですか?

  13. 13

    GeofencingRequestの `setInitialTrigger`の目的は何ですか?

  14. 14

    typescriptの__awaiterの目的は何ですか

  15. 15

    ApplicativeFunctorの「pure」の目的は何ですか

  16. 16

    JasmineのbeforeAll()の目的は何ですか?

  17. 17

    EGitの「SwitchTo」の目的は何ですか?

  18. 18

    Clojureの#_の目的は何ですか?

  19. 19

    Scalazの*>と<*の目的は何ですか

  20. 20

    reactbootstrapのcomponentClasspropの目的は何ですか

  21. 21

    OracleSQLの/ * + * /の目的は何ですか?

  22. 22

    JpaTransactionManagerのsetNestedTransactionAllowedの目的は何ですか

  23. 23

    curdocの目的は、()とは何ですか?

  24. 24

    BeginFormで@usingの目的は何ですか

  25. 25

    / etc / hostsの目的は何ですか?

  26. 26

    / etc / defaultの目的は何ですか?

  27. 27

    ssh-agentの目的は何ですか?

  28. 28

    「pip install --user ...」の目的は何ですか?

  29. 29

    「a and a or b」の目的は何ですか?

ホットタグ

アーカイブ