8

Proxy クラスの 1 つですべてのロケーション コードを管理したいと考えています。クラスはゼロから構築されており、UIViewを継承するクラスまたは同様のクラスで構築されていないため、 を追加しようとすると、NSObjectProtocol「プロトコルに準拠していません」というエラーがスローされます。NSObjectProtocolCLLocationManagerDelegate

class GeoProxy : Proxy, CLLocationManagerDelegate
{
   var locationManager = CLLocationManager()

   override class var NAME: String { return "GeoProxy" }
}

すべてのNSObjectProtocol関数を追加せずにクラスを準拠させる方法はありますか?

4

2 に答える 2

12

より簡単な方法は、Proxyクラスを継承させることですNSObject:

class Proxy: NSObject {
}

次に、すべてのサブクラスが に準拠しNSObjectProtocolます。さらに、これらのクラスは Objective-C コードと互換性があります。

于 2015-12-14T12:47:27.053 に答える
5

CLLocationManagerDelegate関連するコードをviewComponent( )に入れUIViewController、そこから処理するのが最善です。UIViewController は既に継承されNSObjectているため、PureMVC のコア アクターを変更する必要はありません (Notifierこの場合)。

もう 1 つのオプションは、場所に関連するアクティビティを管理する独立したクラスを作成することです。たとえば、viewComponent としてインスタンス化する Mediator をインスタンス化し、プロトコルを介してそれ自体をデリゲートとして設定しLocationMediatorます。class Location: NSObject, CLLocationManagerDelegateILocation

LocationMediatorデリゲートを介して viewComponent からのイベントをリッスンし、ILocation関心のある他のアクターが応答できる通知を送信します。

ハードウェア関連のアクティビティはビューに属します

カメラ、GPS、加速度計、ジャイロスコープなどのハードウェア関連のアクティビティと、ブラウザー内のルーターなどの非ハードウェア要素は、通常、イベントを生成し、MVC パラダイムのビュー層に属し、ビュー コンポーネント内で処理する必要があります。viewComponents 内でトリガーされたイベントは、システムの他の部分と通信する必要がある場合、メディエーターによって処理されます。ProxyWeb サービスまたは永続化に最適です。

于 2016-03-27T15:25:43.320 に答える