HOME > Protocol
Protocol
どうやらswiftのプロトコルはJavaやActionScriptでいうInterface(ルール決め)の様です。このクラスは必ずA,B,Cの関数や変数を持たないとダメですよ!とルールをつけてあげることができます。
多くの人が同時に開発していたりすると、開発者も千差万別色々な方法でコーディングされますが、こういった規制があれば基礎部分は一定になり横とのつながり、別の開発者との連携等も 明確に連携しやすくなる利点があります。
SwiftやObjectivce-CではDelegateという記述に悩まされます。このDelegateはProtocolによって設計されているのです。
例えばWebViewのクラスをUIViewControllerに配置した場合、WebViewのイベントを親のViewControllerが 受け取ることができるようにdelegateを利用するのですが以下のようなprotocolになっています。
//変数宣言
unowned(unsafe) var delegate: UIWebViewDelegate?
//protocol内部
protocol UIWebViewDelegate : NSObjectProtocol {
optional func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool
optional func webViewDidStartLoad(webView: UIWebView)
optional func webViewDidFinishLoad(webView: UIWebView)
optional func webView(webView: UIWebView, didFailLoadWithError error: NSError)
}
上記のProtocolを親Viewに追加している場合、開発者はwebViewDidStartLoad等を親View実装することで適切な関数にアプローチできるようになります。
ただしoptionalが付いているので「強制力」に関してはありません。親Viewに委任している状態で、 「よかったら使ってね、これだけ揃えているよ」といったスタンスなのかと思います。以下、強制力のあるProtocolを記載してみます。
強制力のある独裁的Protocol
まず以下のProtocolを作成してみます。
protocol SwiftSalarymanProtocol{
func loveSwift()
func hateSwift()
}
これはloveSwiftとhateSwiftを強制的に追加しないといけない状態になります。
class ViewController: UIViewController,SwiftSalarymanProtocol {
override func viewDidLoad() {
super.viewDidLoad()
}
...
}
上記の状態だとランタイムエラーが発生します。理由はルール違反をしたからです。必ずloveSwiftとhateSwiftを 追加する必要があるからです。
class ViewController: UIViewController,SwiftSalarymanProtocol {
override func viewDidLoad() {
super.viewDidLoad()
}
func loveSwift() {
}
func hateSwift() {
}
...
}
この状態だとエラーなくコンパイルが可能です。独裁的なProtocolでした。
hateSwiftだけは独裁ルールから外したい場合
funcの前にoptionalを追加します。これだけだとエラーがでますので、protocol の前に@objcを追加してください。
@objc protocol SwiftSalarymanProtocol{
func loveSwift()
optional func hateSwift()
}
この状態だとhateSwiftを追加しなくてもエラーは発生しません。
↓こんな記事もありますよ!
![]() | StringStringとNSStringどちらを利用することもできますが、、、 |
![]() | UIImage中年サラリーマンが画像をローカルやURLやあんな所からアクセスして表示するサンプルを説明しております。 |
![]() | UIPageControlでペラペラめくるチュートリアル画面を作成するUIPageControllでiOSアプリ初回起動時にのみ表示される, ペラペラめくるチュートリアル機能の説明です。プロジェクト作成時にPage-Basedを選ぶと作成することはできるのですが、既存のアプリに追加するには気がので、 既に作成したアプリに初回一回だけ表示するチュートリアルを解説します |
Tweet
![]() |
|||
|