Оператор с использованием точечного синтаксиса дает ожидаемый результат, а синтаксис скобок - нет

Возможный дубликат:
В чем разница между синтаксисом точек и синтаксисом в квадратных скобках?

Я пытался использовать эти два выражения:

  1. [[[self display] text] stringByAppendingFormat:digit];

  2. self.display.text = [self.display.text stringByAppendingFormat:digit]

куда display это UILabel а также digit является NSString,

Я намерен установить digit как лейбл text, но когда я пытался запустить программу, только № 2 дал правильные результаты.

Так в чем же разница между этими двумя выражениями? Неправильно ли использовать квадратные скобки для метода получения и установки?

Я проверил этот похожий вопрос: в чем разница между синтаксисом точек и синтаксисом в квадратных скобках?, но до сих пор не могу понять это.

2 ответа

Решение

Два синтаксиса абсолютно эквивалентны. Точечный синтаксис преобразуется в синтаксис скобок компилятором. Проблема в том, что вы не устанавливаете значение в своем первом фрагменте. Если вы измените его на:

[[self display] setText:[[[self display] text] stringByAppendingFormat:digit]];

Вы увидите тот же результат, что и с точками.

Я бы предложил использовать временную переменную, чтобы сделать ее немного более читабельной:

NSString * oldText = [[self display] text];
[[self display] setText:[oldText stringByAppendingFormat:@"%@", digit]];

Также обратите внимание, что у вас должна быть строка формата в качестве первого аргумента stringByAppendingFormat:, Если твой digit В строке случайно были указаны спецификаторы формата, это может привести к сбою. Лучший выбор здесь будет stringByAppendingString: - [oldText stringByAppendingString:digit],

По сути, нет никакой разницы между ними.

Я не знаю, мистически ли вы сбросили несколько кодов, но когда вы используете -

  [[[self display] text] stringByAppendingFormat:digit];

Вы не присвоили результат выражения вашей переменной. вам следует:

   self.display.text = [[[self display] text] stringByAppendingFormat:digit];

Надеюсь, это поможет

Шани

Другие вопросы по тегам