文書   >   Swift   >  Cocoa Design Patterns   >   Using Delegates to Customize Object Behavior


記事


Using Delegates to Customize Object Behavior
(カスタム化されたオブジェクトの動作にデリゲートを使用する)


委任者に代わってイベントに応答します。





概観


デリゲートを使用して、アプリ内のイベントをあなたに通知する Cocoa オブジェクトと対話します。


デリゲートプロトコルを採用する


Cocoa API は、しばしばデリゲートメソッドを含むプロトコルを提供します。ユーザーがウィンドウのサイズを変更するなどのイベントが発生すると、委任者であるクラスがイベントを検出し、デリゲートとしてあなたが指定したクラスのデリゲートメソッドを呼び出します。デリゲートメソッドは、アプリがイベントに応答する方法をカスタマイズできます。


以下の例では、NSWindowDelegate プロトコルを採用し、window(_:willUseFullScreenContentSize:) メソッドを実装しています。


class MyDelegate: NSObject, NSWindowDelegate {
    func window(_ window: NSWindow, willUseFullScreenContentSize proposedSize: NSSize) -> NSSize {
        return proposedSize
    }
}


デリゲートが存在することを確認


Cocoa のデリゲートパターンでは、デリゲートをインスタンス化する必要はありません。イベントに応答する必要がない場合は、デリゲートを作成する必要はありません。オブジェクトのデリゲートでメソッドを呼び出す前に、デリゲートが nil でないことを確認してください。


以下の例では、NSWindow を作成し、optional の連鎖を使用して、ウィンドウのデリゲートが存在することを確認してから、メッセージをデリゲートに送信します。


let myWindow = NSWindow(
    contentRect: NSRect(x: 0, y: 0, width: 5120, height: 2880),
    styleMask: .fullScreen,
    backing: .buffered,
    defer: false
)

myWindow.delegate = MyDelegate()
if let fullScreenSize = myWindow.delegate?.window(myWindow, willUseFullScreenContentSize: mySize) {
    print(NSStringFromSize(fullScreenSize))
}


以下も見よ





共通のパターン

















トップへ(Swift 標準ライブラリ)












トップへ(Swift 標準ライブラリ)












トップへ(Swift 標準ライブラリ)












トップへ(Swift 標準ライブラリ)












トップへ(Swift 標準ライブラリ)












トップへ(Swift 標準ライブラリ)
目次
Xcode 11 の新機能

Swift 標準ライブラリ
  • 概観
  • 以下も見よ












  • トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)