私は1つがセッターであり、もう1つはプロパティオブザーバであることを理解しています。私の質問は、彼らの行動がどのように異なっているのか、そしていつ他のものを使うのかということです。彼らはほとんど同じことをしないのですか?たとえば、setとdidSetの基本的な違いは何ですか?
6
A
答えて
9
これらは、まったく同じことをしません。反対に、まったく異なる目的を持っています。 get
およびset
は、計算されたプロパティで使用されます。たとえば、実際には使用されていないが、デモが良いこの構造例を考えてみましょう。だから、
struct test {
var x = 5
var y = 5
var number: Int {
get {
return x * y
}
set (newValue){
x = newValue/2
y = newValue/2
}
}
}
var s = test()
s.number //25
s.number = 100
s.x //50
s.number //2500
、変数number
は、伝統的な意味での変数ではありませんあなたが見ることができるように、それは計算されたプロパティです。だから、s.number
と呼ぶと、xとyの積が得られます。また、このセットを使用して、構造内の他の変数(計算されたプロパティ自体ではない)を変更します。したがって、私はx
とy
をnewValue
に基づいて異なる値に設定しました。計算されたプロパティのこのアイデアは関数の代わりに使用することができ、関数からのデータの取得を簡略化するのに非常に便利です。たとえば、距離をキロメートル単位で持つ構造を持つことができ、マイル単位で非常に頻繁にそれを望むかもしれません。したがって、計算されたプロパティmiles
を作成してget
メソッドを使用してキロメートルの数を計算し、プログラムでマイルを設定した場合はセッターとのキロ数を変更することができます。
さて、didSet
とwillSet
ため。これらを使用して、構造に値変更を通知することができます。たとえば、averageTrackerです。
struct averageTracker {
var total: Double = 0 {
didSet {
numEntries++
}
}
var numEntries: Double = 0
var average: Double {
get {
return total/numEntries
}
}
}
var ave = averageTracker()
ave.total += 10
ave.total += 20
ave.average //15
didSet
はつまり、それは計算されたプロパティではありません、値を含む変数に実際にどのように注意してください。また、計算されたプロパティーaverage
を使用して平均値を取得しました。全体的に、私はSwiftのこの非常に強力な面に関してあなたの混乱を解消したいと思っています。
関連する問題
- 1. ToString()とConvert.ToString()の基本的な違いは何ですか?
- 2. jobconfとjobの基本的な違いは何ですか?
- 3. WindowsDXとは何ですか? WindowsGLの意味と基本的な違い
- 4. 行列の乗算とループスルーの基本的な違いは何ですか?
- 5. jTextArea.setText()メソッドとjTextArea.append()メソッドの基本的な違いは何ですか?
- 6. フラグメントと基本クラスの拡張の違いは何ですか?
- 7. dotnet cliとangular cli基本プロジェクトテンプレートの違いは何ですか?
- 8. 私の基本的な電卓には何が間違っていますか?
- 9. この基本的な方法Javaで何が間違っていますか?
- 10. 基本的なC#インターフェイスのスコープとは何ですか?
- 11. aligned_storageの基本的な使い方は何ですか?
- 12. アセンブリの[di]と[array + di]のアドレス指定の基本的な違いは何ですか?考える
- 13. javascriptの関数とオブジェクトの本質的な違いは何ですか?
- 14. 基本的な質問との違い@アクティブなレコード
- 15. 内部/ローカル/匿名のクラスに関して、JavaとC#の基本的な違いは何ですか?
- 16. C++でsetとunordered_setの違いは何ですか?
- 17. 関連するコンテンツクエリの基本的なアルゴリズムは何ですか?
- 18. SQLMETALによって生成されたマッピングファイルとEDMGeneratorの基本的な違いは何ですか?
- 19. emacsのsetqとset-variableの違いは何ですか?
- 20. T-SQLのSELECTとSETの違いは何ですか
- 21. テキストマイニングの基本的なアルゴリズムは何ですか?
- 22. 基本的なASP.NETフォームのセキュリティプラクティスは何ですか?
- 23. qtimerの基本的な作業は何ですか?
- 24. Nimの基本的な方法は何ですか?
- 25. 基本的なjQuery:ラッパーのポイントは何ですか?
- 26. sitecoreのitem.Axes.GetDescendants()とitem.Axes.selectitems()の基本的な違い
- 27. Set-CookieとCookieの違いは何ですか
- 28. new-itempropertyとset-itempropertyの違いは何ですか?
- 29. std :: setとstd :: vectorの違いは何ですか?
- 30. Javaベクトルメソッドset()とsetElementAt()の違いは何ですか?