1

自動レイアウト、セッション 228 で昨年の WWDC を見ています。次のコードがあります。

NSView *previousView = nil
for (NSView *view in letterViews) {
...
  [NSDictionary *views = NSDictionaryOfVariableBindings(previousView, view);
  [NSLayoutConstraint constraintsWithVisualFormat:@"[previousView(==view)]" 
    options:0 metrics:nil views:views]];

ここで文字列値「previousView」と「view」はどのように使用されますか? そのメソッドは実際に名前からオブジェクトを解決できますか?

TIAマーク

4

1 に答える 1

3

いいえ、変数名はどこでも利用できるわけではありません。これはCと同じです。

何が起こっているかは次のとおりです。

NSDictionaryOfVariableBindingsプリプロセッサを使用してパラメータをNSStringsに変換するだけです。

#define NSDictionaryOfVariableBindings(...) \
 _NSDictionaryOfVariableBindings(@"" # __VA_ARGS__, __VA_ARGS__, nil)

つまり、次のようにNSDictionaryOfVariableBindings(previousView, view)展開されます。

_NSDictionaryOfVariableBindings(@"" "previousView, view", previousView, view, nil)

NSDictionaryプライベート関数に渡された文字列パラメータを分割することで、返されたキーを簡単に作成できます_NSDictionaryOfVariableBindings。この場合、そのパラメータは に展開され@"previousView, view"ます。

于 2013-05-22T05:29:30.580 に答える