2016-10-31 7 views
1

私はこれをテスト目的で行っています。それは依存性注入に役立ちます。Objective-C NSArrayのゲッターとセッターでSwiftプロトコルを定義する方法

私は私のSwift 3プロジェクトにインポートしたObjective-Cライブラリを持っています。 Objective-Cのライブラリ内のクラスの一つは、このように定義されています

@interface Auth : NSObject 
@property (strong, readwrite) NSString *clientId; 
@property (strong, readwrite) NSArray *scopes; 
@end 

を私スウィフトプロジェクトでは、私は、プロトコルを定義したいです。プロトコルでは、2つのセッターと2つのゲッターの4つのメソッドを定義する必要があります。

SwiftのAuthクラスを拡張子で再オープンできるようにプロトコルを定義し、Objective-CクラスのためにAuthが自分のプロトコルに準拠していることを宣言しますすでに準拠しています。

は、ここに私のプロトコルです:

protocol AuthProtocol { 
    var clientID: String! { get set } 
} 

ここ拡張子です:

extension Auth: AuthProtocol {} 

これが正常に動作します。 AuthオブジェクトをAuthProtocolsとして扱うことができ、clientIDプロパティの設定と取得にアクセスできます。

プロトコルがスコープ配列のセッターとゲッターを定義しようとすると問題が発生します。私はSwiftのNSArrayArray<AnyObject>だと信じています。ここに私が試したものです:

protocol AuthProtocol { 
    var clientID: String! { get set } 
    var scopes: Array<AnyObject> { get set } 
} 

今すぐ拡張のためAuthを再び開くラインは

タイプAuthは、私が上のクリックしたときにAuthProtocol

Xcodeのは、解決策を提案しているプロトコルに準拠していないと文句を言いこのコードをエクステンションの本文に追加するエラー:

extension Auth: AuthProtocol { 
    internal var scopes: Array<AnyObject> { 
     get { 
      <#code#> 
     } 
     set { 
      <#code#> 
     } 
    } 
} 

このコードは、現在internal行にエラーがあります。

このように、私は scopes配列のgetterとsetterで AuthProtocolを定義するにはどうすればよい独自のタイプ

内で使用

scopes行:

extension Auth: AuthProtocol {} 

不満はありませんか?

これは、問題がNSArrayタイプと関係していることを示しています。

答えて

1

あなたは、プロトコルが「生成するインターフェイス」コマンドを使って、どうあるべきかを正確にお見せするためのXcodeを使用することができます。

Generated Interface Prompt

これは生成されたコードにジャンプします:

open class Auth : NSObject { 
    open var clientId: String! 
    open var scopes: [Any]! 
} 

この生成されたクラス定義を正しいプロトコル定義に変換します。

+0

それは素晴らしいツールです!私が以前にそれについて知りたがりと思います。ありがとうございました。あなたのソリューションは機能します。私はインターフェイスを生成するためにxcodeを取得するのに問題があります。 'Generated Interface'をクリックすると、xcodeは私にこのhttp://i.imgur.com/w8BJqdw.pngを表示し、そこにハングアップします。 Mac OSX Sierra 10.12.1でXcode 8.1を使用しています。それについて何か考えていますか?ご協力いただきありがとうございます。 – pachun

+0

悲しいことに、このビューはかなりバギーです。 Xcodeを再起動するか、派生したデータをクリアしてから動作させる必要があります。 – Casey

+0

十分です。それはうまくいった。私は昨夜からXcodeを開いていた。あなたは束を助けた。ありがとう! – pachun

関連する問題