SwiftでNSProxyを使った開発ができなくなってた2015-07-22SwiftでNSProxyを使った開発ができなくなってたiOS下記事で紹介したライブラリのSwift版を作りたかったけど挫折した話です。このライブラリではNSProxyを使ってるんですがSwiftではできなくなっている事があって実装できませんでした。name;@end上のように宣言をしておけば下のようにUserDefaultsのデータを取得できます。セットも同様にプロパティー形式アクセスできます。defaults.registeredDefaults.name;上記機能の実装方法NSProxyというオブジェクトを使って実装しています。Rubyのmethod_missingに近いものだと考えると分かりやすいかと思います。registeredDefaultsはSampleDefaultsのインスタンスを返すように見えますが、実はLKUserDefaultsProxyというクラスのインスタンスを返します。上の例ではregisteredDefaultsのnameというプロパティーにアクセスしていますが、LKUserDefaultsProxyにはそんなプロパティーがないので普通はエラーが起きます。LKUserDefaultsProxyにforwardInvocationというメソッドを実装しておけばエラー発生前にforwardInvocationを通るようになります。そこでプロパティー名を取れるので、それを元にUserDefaultsへのセットや取得をしています。SwiftでできなかったことNSInvocationというオブジェクトが使えなくなっていました。forwardInvocationは引数がNSInvocationなのでforwardInvocationの実装自体できなくなっていました。その他できない事それとSwiftは型が違うクラスへの代入は落ちます。下のような実装はObjective-cでは落ちなかったのですがSwiftでは使えません。Stringその為registeredDefaultsというメソッドが実はLKUserDefaultsProxyというクラスのインスタンスを返すという事もできなくなっていました。Objective-cのid型のようにどんなメソッドも送れるオブジェクトもないので事実上インスタンスの偽装ができなくなりました。AnyObjectはidに近そうだったのですがどんなメソッドも送れるわけではありませんでした。Extensionでウィジェット作成SwiftUIを触ってみるGoogleのデータポータル(旧DataStudio)でアプリの新規ユーザーをグラフ化FirebaseのデータをBigQueryに入れて分析する月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。