私は Swift で iOS 用のアプリを作成しており、API 呼び出しロジックを ViewController の外に保持しようとしています。以下で説明する 1 つの API 呼び出しについて、このチュートリアルに従いました。
ViewController が実装するプロトコル「APIControllerProtocol」を作成してから、タイプ APIControllerProtocol のインスタンスを保持する「delegate」というプロパティを含む APIController クラスを作成しています。プロトコルは単純に次のように定義されます。
protocol APIControllerProtocol {
func didReceiveAPIResults(result: SwiftyJSON.JSON)
}
そして、ViewController は、API 呼び出しが JSON データを返した後に呼び出される didReceiveAPIResults 関数を実装します。ViewController には、API を呼び出す関数を呼び出すための APIController のインスタンスも含まれます。
この時点で、API 呼び出しを実行する ViewController を増やしたいと考えています。ViewController ごとに 1 つの API 呼び出しのみを行う必要がある場合は、APIController に別の関数を追加するだけで、新しい ViewController に同じプロトコルを使用させることができます。ただし、2 つ以上の API 呼び出しを行う必要がある ViewController がある場合、このロジックには欠陥があります。
- ViewController で didReceiveAPIResults を 2 つの異なる方法で呼び出すことができません。
複数の「デリゲート」プロパティを APIController クラスに追加して、さまざまな種類のプロトコルを保持することは道だとは思いません。
プロトコルで複数の関数を定義するということは、1 つの API 呼び出しのみを行う必要がある ViewControllers でこれらすべての関数を実装する必要があることを意味します。
この問題を解決するための私のアイデアは
ViewControllerごとにAPIControllerクラスとAPIControllerProtocolを作る
APIControllerProtocol でオプションの関数を使用して、すべての ViewController がすべての関数を実装する必要がないようにします (これが実際にどのように機能するかはわかりません)。
他の洞察をいただければ幸いです。