2016-05-16 7 views
2

だからここのAppleのドキュメントを通過するIM - Apple Docs「公開プライベート(設定)」アクセス修飾子はどのように機能しますか?

その後、私はこのに走った...正確に動作しpublic private(set)を追加するどのよう

public struct TrackedString { 
    public private(set) var numberOfEdits = 0 
    public var value: String = "" { 
     didSet { 
      numberOfEdits += 1 
     } 
    } 
    public init() {} 
} 

?驚くほど簡単な例や説明を表示できれば!

答えて

5

これは、numberOfEditsのゲッターが公開されているが、セッターがプライベートであることを意味します。それ以上のことはありません。

この場合の理由は、numberOfEditsを一般に読むことができるようにするためですが、変更できるのはvalueです。それが完全にpublicだったなら誰でもそれを設定できましたが、それが設定可能な場合はdidSetvalueに変更できませんでした。 private(set)は、これら2つの間の妥協点です。

+0

説明は間違いですが、言及された変数が間違っています。 numberOfEditsプロパティは、クラス内からのみ設定可能なプロパティです(他の場所の読み取り専用)。 valueプロパティは、どこでも読み取り/書き込みが可能です。 – ghostatron

+0

ありがとう@conarch。一定。 –

+3

@conarch "numberOfEditsプロパティは、クラス" Not the class "内からのみ設定できるプロパティです。ファイル。 Swiftでは、クラス・スコープのプライバシーがまだ実装されていません。 – matt

関連する問題