スクリーンレットデリゲートを追加する
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、こちらまでご連絡ください。
スクリーンレットデリゲートを使用すると、他のクラスがスクリーンレットのアクションに応答できます。 たとえば、 Login Screenletのデリゲート 使用すると、アプリの開発者はログインの成功または失敗に応答するメソッドを実装できます。 なお、 リファレンスドキュメント Liferayの画面リストScreenletのデリゲートメソッドが付属していた各Screenletについて。
また、独自のスクリーンレットのデリゲートを作成することもできます。 このチュートリアルでは、からのコードを使用して、これを行うために必要な手順を説明します サンプル追加ブックマークScreenletの高度なバージョン 例として。 このチュートリアル存在のすべてのコード例 このScreenletのScreenletクラス。 このサンプルスクリーンレットには、Liferayインスタンスのブックマークポートレットにブックマークを追加することと、URLからブックマークのタイトルを取得することの2つのアクションがあることに注意してください。 このチュートリアルでは、ブックマークを追加するためのデリゲートの作成についてのみ説明します。
スクリーンレットにデリゲートを追加するには、次の手順に従います。
-
BaseScreenletDelegate
クラスを拡張するデリゲートプロトコルを定義します。 このプロトコルでは、適合クラスがサーバー呼び出しの成功と失敗にそれぞれ応答できるように、成功メソッドと失敗メソッドを定義します。 パラメーターとして、これらのメソッドはScreenletインスタンスと成功または失敗オブジェクトを受け取る必要があります。 たとえば、Add Bookmark Screenletのデリゲートプロトコル(AddBookmarkScreenletDelegate
)は、次の成功メソッドと失敗メソッドを定義します。@objc public protocol AddBookmarkScreenletDelegate: BaseScreenletDelegate { optional func screenlet(screenlet: AddBookmarkScreenlet, onBookmarkAdded bookmark: [String: AnyObject]) optional func screenlet(screenlet: AddBookmarkScreenlet, onAddBookmarkError error: NSError) }
どちらも、最初の引数として
AddBookmarkScreenlet
インスタンスを取ります。 2番目の引数では、成功メソッドにはサーバーに追加されたブックマークが含まれ、失敗メソッドにはNSError
オブジェクトが含まれます。 この例では、メソッドはオプションです。 これは、デリゲートクラスがそれらを実装する必要がないことを意味します。 -
Screenletクラスで、デリゲートのプロパティを追加します。 このプロパティは、デリゲートのインスタンスとして
BaseScreenlet
のデリゲート
プロパティを返す必要があります。 たとえば、AddBookmarkScreenlet
のaddBookmarkDelegate
プロパティはself.delegate
プロパティをAddBookmarkScreenletDelegate
として返します。var addBookmarkDelegate: AddBookmarkScreenletDelegate? { return self.delegate as? AddBookmarkScreenletDelegate }
-
また、Screenletクラスで、Interactorのクロージャーで適切なデリゲートメソッドを呼び出します。 たとえば、
AddBookmarkScreenlet
のinteractor.onSuccess
クロージャは、Screenletがブックマークを正常に追加したときに応答するデリゲートメソッドを呼び出します。interactor.onFailure
クロージャーは、スクリーンレットがブックマークの追加に失敗したときに応答するデリゲートメソッドを呼び出します。 この例では、これらのクロージャーはブックマーク(createAddBookmarkInteractor
)を追加するScreenletクラスのInteractorメソッド内にあることに注意してください。 Screenletクラスに適切なInteractorのクロージャーがある場合は、必ずデリゲートメソッドを呼び出してください。private func createAddBookmarkInteractor() -> Interactor { let interactor = AddBookmarkInteractor(screenlet: self, folderId: folderId, title: viewModel.title!, url: viewModel.URL!) // Called when the Interactor finishes successfully interactor.onSuccess = { if let bookmark = interactor.resultBookmark { self.addBookmarkDelegate?.screenlet?(self, onBookmarkAdded: bookmark) } } // Called when the Interactor finishes with an error interactor.onFailure = { error in self.addBookmarkDelegate?.screenlet?(self, onAddBookmarkError: error) } return interactor }
すばらしいです\! これで、スクリーンレットにデリゲートを追加する方法がわかりました。
関連トピック