2017-07-14 3 views
2

私はYoutubeのいくつかのビデオでこれを見てきました。変数の宣言はアンダースコアで

class Student { 

    private var _name: String! 
    private var _studentID: Int! 

    var name: String { 
     return _name 
    } 

    var studentID:Int { 
     return _studentID 
    } 

    init(name: String, studentID: Int) { 
     self._name = name 
     self._studentID = studentID 
    } 
} 

どれでも彼らはこれをやっている理由(_name_studentIDを追加)の代わりに:

class Student { 

    private var name: String! 
    private var studentID: Int! 

    init(name: String, studentID: Int) { 
     self.name = name 
     self.studentID = studentID 
    } 
} 

はどうもありがとうございました。

+1

rmaddyの回答は以下のとおりです。しかし、これらのパターンは、あなたが実際にそれを公に読み取り専用にする必要がある場合にのみ使用してください。しかし、あなたはそれをまったく変えているようには見えません。なぜなら、(letを使って)定数を使って、なぜ始めるのをやめないのかという疑問が湧きます。 'class student {let name:String; let studentID:Int ...} '。または、少なくとも、なぜあなたは暗黙のオプションを使用しているのですか?なぜ値型を使用しないのですか?私はあなたが悪い習慣を拾うように見えるので、あなたはそれらの特定のビデオを使用すべきではないというrmaddyの結論に同意します。 – Rob

答えて

5

最初の例は、本質的には公開されているが個人的に書き込み可能なプロパティを作成しています。

第2のコードセットは、第1のセットと同じことをしません。

このコードを書くための適切な方法は次のとおりです。

private (set) var name: String // no need for the ! 
private (set) var studentID: Int // no need for the ! 

init(name: String, studentID: Int) { 
    self.name = name 
    self.studentID = studentID 
} 

これは、外部のユーザーに読めるが、クラスによってのみ設定可能なプロパティになります。これは、第1セットのコードが実装するものですが、はるかに冗長で不必要な方法です。

プライベートインスタンス変数を作成するときに、Objective-Cから継承された命名規則にすぎません。

個人的には、第1セットのコードを使用するビデオやチュートリアルは避けてください。

+0

なぜ、第1セットのコードを使用してチュートリアルを避けるのですか? – Frankie

+3

プロパティとして単純なものを書くのは本当に最善の方法ではないからです。そして、作者がこのような単純なやり方をすることができない場合、私は彼らが書いた他のコードを信頼しません。しかし、それは私です。私は、特定の言語のベストプラクティスを学びたいと思っています。その第1セットのコードは、古いObjective-CコードをSwiftに正しく書き込もうとせずに変換したように見えます。 – rmaddy

+3

@Frankie - 拷問されたパターンの使用と、アンダースコアと暗黙のうちにアンラップされたオプションの使用はすべて、強力なSwiftプログラマーではない著者を示唆しています。あなたはこれらの習慣を自分で拾いたくはありません。そして、彼らは後でビデオで使用する他の悪い習慣を知っている... – Rob