contentiOSDC2018で紹介されていたdynamicMemberLookupに感動したので深掘りするPythonXcodeiOSSwiftiOSDCiOSDCで参考になった技術を深掘りする今回は時間の関係で下の英語の記事の一部を翻訳したものを上げます。翻訳の許可を頂いてます。Lookupの箇所です。理由はあとがきに書いていますが、@dynamicMemberLookupの登場がSwiftコミュニティとPythonコミュニティに大きなインパクトを与える可能性が大きいことです。チュートリアル用のサンプルファイルはこちらのリンクからダウンロードできます。Lookupについて聞いたことがあります。ない場合は、ここで概念を学ぶだけでなく様々なことを学ぶでしょう。Lookupのパワーが分かるでしょう。Lookupを使用すると、コーダーがコンパイル時に存在しないプロパティに対してドットシンタックスで使用できるようになります。要するに、実行時にメンバーが存在し、そのプロセスで読みやすいコードを取得することを信じてコーディングしています。この機能の提案やSwiftコミュニティでの関連する会話で述べたように、この機能はPythonのような他の言語との相互運用性をサポートし、データベース実装者やCoreImageなどの文字列型APIに関する定型的なラッパーを作成します。@dynamicMemberLookupDogCatcherページを開き、コードを確認します。playgroundでは、DogはDogがDirectionで走っている方法を表します。dynamicMemberLookupの力で、directionOfMovementとmovingは、それらのプロパティが明示的に存在しなくてもアクセスできます。犬をダイナミックになる時です。Dogこの動的パワーを有効にする方法は、type属性@dynamicMemberLookupの使用することです。Directionを返すsubscriptメソッドを追加する上で下記のコードを追加します。.motionless}☆マークされた行のコメントを外して、dynamicMemberLookupをDogに追加します。☆この行の上にDogのコメントを外します。directionOfMovementまたはmovingというプロパティにアクセスできるようになりました。\(movingDirection).")playgroundをRunしましょう。値が残っていることもあれば正しくないこともありますが、最初に表示される2行は次のようになります。subscript(dynamicMember:)Swiftは、異なる戻り型の添字宣言のオーバーロードをサポートしています。0}これでspeedというプロパティにアクセスできます。\(speed).")playgroundをRunしましょう。こんな風に出力されると思います。12.かなりいいですね?@dynamicMemberLookupは、Pythonなどの他のプログラミング言語にアクセスする必要がある場合でも、コードを見栄えの良いものにする強力な機能です。:)機能に依存するプロパティのコンパイル時チェックのメリットはありません。Xcodeのコード補完機能もあなたを助けません。良いニュースは、プロのiOS開発者が書くよりも多くのコードを読むことです。Lookupが提供するシンタックスシュガーは、ただ捨てるだけのものではありません。これはSwiftの特定のユースケースと言語の相互運用性を保証し、楽しく素晴らしい機能です。Lookupのオリジナルの提案は、特にPythonでの言語相互運用性に対処しました。それが有用な唯一の状況ではありません。純粋なSwiftユースケースを示すために、DogCatcher.xcplaygroundpageにあるJSONDogCatcherコードを操作します。これは、String、Int、およびJSON辞書を処理するために設計されたいくつかのプロパティを持つシンプルな構造体です。このような構造体を使用すると、JSONDogCatcherを作成し、最終的に特定のString値またはInt値を検索することができます。Methodこのような構造体を使用してJSONディクショナリに掘り下げる伝統的な方法は、添字法を使用することです。playgroundにはすでに従来の添字実装が含まれています。添字メソッドを使用してString値またはInt値にアクセスすると、通常は次のようになり、またplaygroundにも表示されます。\(messyName).")角かっこ、引用符、疑問符を見なければなりませんが、これは機能します。playgroundをRunしましょう。次のように表示されます。Simpson.それはうまく動作しますが、ドットシンタックスを使用するだけで目がより簡単になります。Lookupを使用すると、複数レベルのJSONデータ構造を掘り下げることができます。CatcherDogのように、JSONDogCatcher構造体にdynamicMemberLookup属性を追加します。:)メソッドをここに追加してください。:)メソッドは既存の添え字メソッドを呼び出しますが、角かっことStringキーを使用する定型コードを削除します。{それで、ドット表記法を使って犬のスピードとオーナーの名前を得ることができます。☆キャッチャーでオーナーの名前とスピードを取得するには、ドット表記を使用してください。\(dogSpeed).")playgroundをRunしましょう。犬とその所有者が再び一緒になり、コードがよりきれいに見えます。ダイナミックなSwiftの力によって、このダイナミックな犬は裏庭のバニーを追うことに戻ることができます。あとがき拙い翻訳で申し訳ございません。一部、何を言っているのか分からない英語がありましたので適当に日本語っぽい文章にしてみました。(特に☆マークが付いている箇所)簡単に何がすごいのかと言うと@dynamicMemberLookupの登場によってSwiftからPythonコードやライブラリをインポートして使えるようになっただけでなくPythonコードをSwiftぽくドットシンタックスでプロパティにアクセスできるようになったと言うことです。Python連携ができるようになることもインパクトが大きいですが、PythonをSwiftで操作するとtypoしやすくなるのでそれをSwiftぽく書けるようになるのは作業効率がとても良くなります。さんのiOSDC2018のこのLTのプレゼン資料を見ていただけたらわかりやすいと思いました。(勝手に引用してしまってすみません。)iOSDC2018の中で個人的に一番感動したのがこのLTでしたので。TensorFlowの内容でした。このライブラリでTensorFlowをSwiftで操作できると言うこと。Lattnerの名前が入っているのが印象的ですね。これがうまく言えば、SwiftがPythonをうまく吸収することができて一気に世の中に浸透するんだとか。早くSwiftが世界のTop1になってほしい自分は早くこのプロジェクトが成功してほしいと思ってます。ちなみにこのdynamicMemberLookupってこの記事で最初に取り上げてます。requestStockLike7@tamappeフリーランス上がりのiOSエンジニアです。今はオンライン英会話の会社に所属しiOSとAndroidの両OSを開発しています。使用言語は英語/Swift/Objective-C/Java/Kotlin/Ruby/PHPです。注目のトレンドはブロックチェーンでDAppsです。趣味はポーカーとスプラトゥーン2。upLoginユーザーは見つかりませんでした。