2016-05-12 16 views
0

りんごの例here "クラスは参照型です"とは、クラスオブジェクトが他の言語(C、C++、Objective-C)のポインタに似ており、定数オブジェクトの値を変更できることを意味します。letまたはvarキーワードでクラスオブジェクトを作成しますか?

これは、クラスオブジェクト(常に定数オブジェクトを作成するか、変数オブジェクトを作成する)を作成するための好ましい方法です。私が作成してテストするときには、両方とも同じ方法で動作しています。そして、クラスオブジェクトに関して "letとvar"の違いは何ですか?

class Student { 
var name: String 

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

私はクラスのクラスの変数オブジェクトを作成します。

var student = Student(name: "student name") 
student.name = "Raj" 

print("name = \(student.name)") 

は、私が定数オブジェクトを作成したときに動作します。

let student = Student(name: "studentName") 
student.name = "Raj" 

print("name = \(student.name)") 

どちらもOKのタイプを参照するため、両方とも値を変更できます。しかし、どのクラスがクラスオブジェクトを作成するための好ましい方法であるのか、クラスオブジェクトの観点からどのような違いがあるのか​​を知りたい。

+0

異なる結果を得るために両方が使用されているため、一方を他方よりも優先することはできません。 'name'プロパティを' var'ではなく 'let'として定義すると、オブジェクトの初期化後に名前を編集できないことがわかります。 – Laffen

+0

「クラスオブジェクト」という用語を使用しないでください。これはObjective-Cのような言語で使用され、クラスはそれ自体がオブジェクトです。あなたが話しているのは、クラスのインスタンス_です。 – gnasher729

答えて

2

let student2 = Student(name: "mohan") 
let student = Student(name: "sohan") 

student = student2 // gives you an error. 

聞かせていますが、VARで作成した場合は、別のオブジェクトに学生のオブジェクトを変更することができ、それが別のオブジェクトを指摘して、あなたが学生オブジェクトを作成した場合は、新しいオブジェクトを割り当てることはできません。

let student2 = Student(name: "mohan") 
var student = Student(name: "sohan") 

student = student2 // have ref of student2 
print(student.name) // gives you mohan 

student.name = "rohan" 

print(student.name) // rohan 
print(student2.name) // rohan 
+0

いいえ、私たちはこれもプレイグラウンドではできません – Sahil

関連する問題