私はこれをテスト目的で行っています。それは依存性注入に役立ちます。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のNSArray
がArray<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
タイプと関係していることを示しています。
それは素晴らしいツールです!私が以前にそれについて知りたがりと思います。ありがとうございました。あなたのソリューションは機能します。私はインターフェイスを生成するためにxcodeを取得するのに問題があります。 'Generated Interface'をクリックすると、xcodeは私にこのhttp://i.imgur.com/w8BJqdw.pngを表示し、そこにハングアップします。 Mac OSX Sierra 10.12.1でXcode 8.1を使用しています。それについて何か考えていますか?ご協力いただきありがとうございます。 – pachun
悲しいことに、このビューはかなりバギーです。 Xcodeを再起動するか、派生したデータをクリアしてから動作させる必要があります。 – Casey
十分です。それはうまくいった。私は昨夜からXcodeを開いていた。あなたは束を助けた。ありがとう! – pachun