2017-08-06 16 views
1

私は現在、watchOSアプリの拡張機能を備えたiOSアプリを構築しています。私は両方のアプリケーションで共有される特定のクラスを持っていますが、どちらのプラットフォームでもほとんど同じですが、特定のバリエーションがあります。私はこれがどのように最良に実装されているのだろうかと思います。今、私は次のようにします。これは動作しますがXCodeのが、このことについて、かなり混乱しているようですので、Swiftの共有時計OS/iOSクラスのプラットフォーム固有コード?

#if os(watchOS) 
private var watchOSOnlyProperty: Any? 
#endif 

または

#if os(iOS) 
func iOSOnlyMethod() { 
    ... 
} 
#endif 

、それはいくつかの問題を提供します。インデント、オートコンプリート、およびメソッドのリストは、この構文を使用すると少しばかりオフになります。

これを行う適切な方法は何ですか? SwiftのiOS/watchOS固有のプロパティ&メソッドを共有クラスに追加するにはどうすればよいですか?

+1

これは適切な方法です – Paulw11

+0

私は実際に実行可能ではないと考えているので、これはXCodeで私にとって非常に多くの問題を引き起こします。たとえば、オートコンプリートは、これを使用するクラスでは私にとって完全に機能しなくなっています。他の選択肢はありますか? – BlackWolf

+0

異なるターゲットに異なるソースファイルを作成します。しかしこれはうまくいくはずです。派生したデータを削除してみてください – Paulw11

答えて

0

コード分離

あなたが示唆したように使用#if os(...)

  • 別々のコードには2つの方法があります。
  • 異なるターゲットに別々のファイルを使用してください。

オートコンプリート

Xcodeのでしょう、あなたの現在の選択したターゲットのための唯一のオートコンプリートのコード。 Xcode target selector

あなたは#if os(watchOS)ブロック内のコードのための自動補完をしたいなら、あなたはwathOSターゲットに(ツールバー経由)あなたの現在のターゲットを変更する必要があります。

0

ウォッチアプリターゲットのビルド設定にCプリプロセッサフ​​ラグを追加できます。

-DWATCHOS 

その後

#ifdef WATCHOS 
// watchOS code here 
#else 
// iOS code here 
#endif 

が動作します。

関連する問題