2016-09-02 5 views
0

私は素早く新しい言語です。スウィフトは、新しいオブジェクト指向の機能プロパティオブザーバ「willSet」と「didSet」を提供します。共通の目的Cプロパティとはどのように違いますか?Swift言語でobserverプロパティdidSetとwillSetを使用するとは何ですか?

+0

あなたは[こちら](https://developer.apple.com/library/mac/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html) "プロパティオブザーバー" セクションを読んでいましたか? –

+0

しかし、わからなかった。私は良い例が必要 – RakeshDipuna

+0

この簡単な例を参照してください:http://stackoverflow.com/documentation/swift/536/variables-properties/5220/property-observers#t=201609021224585721363 – Moritz

答えて

3

主な使用法は、変数の古い値と新しい値をキャプチャし、エスカレートすることです。 willSetは、変数variableが設定されようとしているnewValueをキャプチャし、didSetがoldValueをキャプチャします。

セットアップやティアダウンには非常に便利です。

var fileHandle: FileHandle { 
    willSet{ 
     otherClass.disableAccessTo(handle: newValue) 
    } 
    didSet{ 
     otherClass.enableAccessTo(handle: self.fileHandle) 
     yetAnotherClass.archiveFile(handle: oldValue) 
    } 
} 
5

私はプロパティオブザーバを使用し、より具体的にはdidSetをさまざまなものに使用します。

一例は、あなたが UITableViewを持っているし、あなたが好きな要素を保持する配列から、あなたのテーブルビューを移入 UIViewControllerに可能性があり

:、

var persons: [Person]? = nil 

あなたpersonsで何かを変更するたびに、配列の場合は、テーブルビューをリロードする必要があります。あなたはその上のテキストの色、フォント、背景色などを設定したい場合

var persons: [Person]? = nil { 
    didSet { 
     tableView.reloadData() 
    } 
} 

別の例は、@IBOutletsである可能性があります。通常はviewDidLoad()またはそのようないくつかの場所でこれを行うだろうが、今あなたができることにdidSetでも、のようなので:あなたのheaderLabelが初期化されたとき

@IBOutlet weak var headerLabel: UILabel! { 
     didSet { 
      headerLabel.font = UIFont.systemFontOfSize(15) 
      headerLabel.textColor = UIColor.blueColor() 
      headerLabel.text = NSLocalizedString("logIn", comment: "") 
     } 
    } 

さて、これらのプロパティが設定されています。あなたの財産のオブザーバーを使用する方法についてのアイデアを提供します

希望:)

関連する問題