2016-09-16 6 views
3

私はFusuma cocoal pod frameworkを使用しています。しかし、私は、プロジェクト全体が迅速に書かれていると思っていても、客観的なCプロトコルを持っていることが分かりました。目的Cプロトコールをスピーディーに

@objc public protocol FusumaDelegate: class { 

    func fusumaImageSelected(image: UIImage) 
    optional func fusumaDismissedWithImage(image: UIImage) 
    func fusumaVideoCompleted(withFileURL fileURL: NSURL) 
    func fusumaCameraRollUnauthorized() 

    optional func fusumaClosed() 
} 

私は、プロトコルに別の関数を追加します。しかし、私は、パラメータの種類は、私が@objcの削除について考えています目的-C

で表すことができないため

方法は@objcプロトコルのメンバーにすることはできません。このwariningを取得していますプロトコルの前に、それから私はオプションのfuncを削除しなければならないと言います。しかし、私はそれらを通常の機能に変更する気にはなりませんが、私は@objcを削除すれば何を知っているか知りたいのですが。

私が追加しようとしている機能は、私はこの場合3つのVCを持っています。第2のものは、これが解雇された後の第3のVCからのデータを取得するものです。それから私はVC1はデータ

extension FusumaViewController: VC3Delegate { 
    func readyToUploadPost(postUpload: PostUpload) { 
    delegate_?.readyToUploadPost_Fusuma(postUpload) 
} 
+0

多分彼らはObjective-Cの動的な機能を必要としています。あなたはスウィフトでそれをすることはできません。 –

+0

追加しようとしている機能はどのようなものですか? –

+0

@MikeTaverne、あなたの質問に対処する更新された質問を参照してください。オプションのfuncを削除してobjCを削除しようとしましたが、そのパラメータに内部型が使用されているため、Methodをdeclaredpublicにできないというエラーが表示されます。だから、私はそれに対処する完全に別のプロトコルを作成するだけで終わった。それが正しい方法であるかどうかはわかりません。ハックのように思える – user172902

答えて

2

のアップロードを開始できるようにするために、次のデリゲート機能を追加したい@HASは、このプロトコルは、スウィフトは、オプションの使用を許可していないため@objcがある与えられた最も可能性が高い理由を述べていますプロトコル要求方法。これを行うための迅速な方法は、次のようになります。

public protocol FusumaDelegate: class { 

    func fusumaImageSelected(image: UIImage) 
    func fusumaVideoCompleted(withFileURL fileURL: NSURL) 
    func fusumaCameraRollUnauthorized() 
} 

extension FusumaDelegate { 
    func fusumaDismissedWithImage(image: UIImage) {/*Default Implementation*/} 
    func fusumaClosed() {/*Default Implementation*/} 
} 

勿論、その後、あなたは、デフォルトの実装の問題を抱えている私が思う、しかし:あなたがにデフォルトの実装を提供するために、プロトコルの拡張機能を使用でき

そのプロトコルの任意のメソッドまたは計算されたプロパティ要件。適合する型が必要なメソッドまたはプロパティの独自の実装を提供する場合、その実装は拡張によって提供されるものの代わりに使用されます。 The Swift Programming Language

これは、エラーなしで、あなたのアイデアを与えるために運動場で作成されました:

public protocol FusumaDelegate: class { 
    func fusumaImageSelected(image: UIImage) 
    func fusumaVideoCompleted(withFileURL fileURL: NSURL) 
    func fusumaCameraRollUnauthorized() 
} 

extension FusumaDelegate { 
    func fusumaDismissedWithImage(image: UIImage) {} 
    func fusumaClosed() {} 
} 


class Test : UIViewController, FusumaDelegate { 
    func fusumaImageSelected(image: UIImage) { 
     //do stuff 
    } 

    func fusumaVideoCompleted(withFileURL fileURL: NSURL) { 
     //do stuff 
    } 

    func fusumaCameraRollUnauthorized() { 
     //do stuff 
    } 

    func fusumaDismissedWithImage(image: UIImage) { 
     //do stuff 
     self.fusumaClosed() 
    } 
}