Является ли множественное назначение хаком в Obj-C? - PullRequest
5 голосов
/ 20 января 2010

Итак, у меня есть класс (IKImageView) с кучей свойств.

Я знаю, что представление setProp: BOOL возвращает void. Тем не менее:

BOOL b = view.prop = NO;

похоже на работу. Если бы у меня была функция f (), которая возвращает логическое значение, кто-нибудь знает, действительно ли это происходит:

[view setProp:f()];
Bool b = [view getProp];

или

[view setProp: f()];
Bool b = f();

или

BOOL TMP = f();
[view setProp: TMP];
BOOL b = TMP;

Я спрашиваю, потому что, когда я делаю:

BOOL b = view.hasHorizontalScroller = YES;
NSLog(@"b is %d scroll is %d", b, [view getHasHorizontalScroller]);

Я получаю «b равно 1, прокрутка равна 0» (что означает, что setHasHor horizontalScroller по какой-то причине дает сбой, но b установлено правильно)

но:

BOOL b;
[view setHasHorizontalScroller: YES];
b = [view getHasHorizontalScroller];
NSLog(@"b is %d scroll is %d", b, [view getHasHorizontalScroller]);

Я получаю "b = 0, прокрутка - 0"

Это меня очень смущает. (Также, если кто-то может сказать мне, как сбой установки свойства в YES, но тогда это преуспевает в установке b ... и все же никаких ошибок не появляется ...

Ответы [ 2 ]

5 голосов
/ 20 января 2010

Это делает

BOOL TMP = f();
[view setProp: TMP];
BOOL b = TMP;

Это обсуждалось до того, как свойства были отправлены. Некоторые люди думали, что это должно быть ошибкой компиляции, чтобы избежать двусмысленности.

Вероятно, лучше всего избегать строительства полностью.

0 голосов
/ 13 декабря 2015

Похоже, не ошибка.Следующий код:

a.text = b.text = c.text;

производит вызовы этого метода:

// [c text]
// [b setText:]
// [a setText:]

Как видите, [b text] не вызывается в этой цепочке: (

...