2016-12-15 7 views
1

Objective-CカテゴリはSwiftの拡張機能と呼ばれています。Swiftでデリゲート関数を実装するための拡張機能の使用

はしかし、最近、私はこのにぶつかった:彼らはデリゲートfunctions.Thisを実装しているように見えた。これは、

extension MyClass : GMSMapViewDelegate 
{ 
    func mapView(mapView: GMSMapView, idleAtCameraPosition position: GMSCameraPosition) 
    { 
     print("idleAtCameraPosition") 
     self.getAddressFromLocation(mapView.camera.target) 
    } 

} 

は、デリゲートの機能を実現するのは非常に良いときれいな道に見えました。だから私は個人的に試してみましたが、これはうまくいきましたが、カテゴリは拡張機能がないと間違っているかもしれないと思います。サブクラス化を使って他のクラスに余分な機能を追加するために使用されました。

私の質問では、そのような目的のために拡張機能を使用することができますか? 私たちがこれを行うことができれば、エクステンションは単なるカテゴリー以上のものです。なぜ私たちはObjective-Cのカテゴリーでこれを達成できるとは思わないからです。

おかげ

答えて

4

:スウィフトで

拡張することができます

  • が計算されたインスタンスのプロパティと計算されたタイププロパティ
  • を追加インスタンスメソッドと型のメソッド
  • が新たな初期化子を提供する定義
  • サブスクリプトを定義
  • 既存のタイプはプロトコル

に準拠して作成します

  • 新しいネストされた型を定義し、使用はい、拡張クラスは、デリゲートプロトコルに適合させるために有効な方法です。 拡張機能はこの目的のために有効であるだけでなく、優れたコード構成を可能にし、Swiftでの優れたスタイルの実践に従います。

  • 1

    はい、拡張は、既存のクラスだけのクラスに機能を追加することに加えて、新しいプロトコルに準拠することを可能にすることができることを意味しています。公式Swift Language Referenceから

    +1

    拡張機能では、プロトコルに準拠するだけでなく、「クラスに関数を追加する」(特に計算されたインスタンスプロパティを定義する)以外の拡張実装も可能であることに注意することが重要です。 –

    1

    はい、できます。となります。プロトコルを実装するメソッドをクラス拡張に入れることは、Swiftの優れたスタイルとみなされます。彼らは何をするかに基づいてメソッドのグループを分けます。私はあなたのコーディングで拡張機能を自由に使用することを提案します。

    関連する問題