Facebook iOS SDK では、リクエストは次のハンドラーで返されます。
^(FBRequestConnection *connection,
NSDictionary<FBGraphUser> *user,
NSError *error) { }
ユーザー変数は、次のような呼び出しでアクセスできます...
self.userNameLabel.text = user.name;
self.userProfileImage.profileID = user.id;
id <protocolDelegate> object
この構文は、NSDictionary が明示的に id オブジェクトであり、その辞書がプロトコルに準拠していることを除いて、一般的なプロパティ宣言である構文構文に多少似ていますか? しかし、ドット構文はどこから来て、オブジェクト自体をサブクラス化して準拠させることなく、任意の NSFoundation オブジェクトがプロトコルに対応しているとどのように述べているのでしょうか?
ドット表記と NSDictionaryについて追加の調査を行ったところ、NSDictionaryにカテゴリを追加せずに辞書でドット表記を使用することはできないようです。ただし、この特定の NSDictionary インスタンスがその表記法に準拠していることを示す<> 構文の参照は、 Apple のドキュメントでは見当たりませんでした。
また、Facebook のドキュメントでは、このラッピングがどのように機能するかについて少し説明がありません。
FBGraphUser プロトコルは、Facebook ユーザー オブジェクトの最も一般的に使用されるプロパティを表します。FBGraphObject ファサードでラップされた NSDictionary オブジェクトにアクセスするために使用できます。
このリードを FBGraphObject ドキュメントにたどると、この「ファサード...」に準拠する辞書を返すメソッドがありますが、辞書をラップする方法についてはこれ以上の説明はありません。
だから私は私の質問がいくつかあると思います:
- この種の構文を機能させるには、基になるコードはどのようになりますか?
- なぜそれが存在するのですか?
- データを変換できるオブジェクトを作成するのではなく、なぜfacebookがこのように実装するのでしょうか?
説明や洞察をいただければ幸いです。