Как вернуть ноль CGFloat? - PullRequest
       4

Как вернуть ноль CGFloat?

4 голосов
/ 23 февраля 2012

Я бы хотел вернуть nil в tableView:heightForFooterInSection:, но это не разрешено. Есть ли способ вернуть nil как CGFloat?

Зачем ты это делаешь?
Я тестирую, как будет вести себя tableView со смесью заголовков и представлений как sectionFooters. Для одного нижнего колонтитула мне нужно использовать пользовательский вид, но для другого нижнего колонтитула у меня есть 3 или 4 предложения текста, и мне нравится, как система стилизует его и определяет размеры нижнего колонтитула. Но как только я реализую heightForFooterInSection (что требуется для viewForFooterInSection), нижний колонтитул с заголовком больше не будет автоматически изменять размер, чтобы соответствовать данному тексту. Я пытаюсь избежать создания собственного представления для простого текста.

Ответы [ 4 ]

6 голосов
/ 23 февраля 2012

Нет такой вещи, как nil для примитивных значений. Вы можете попытаться вернуть 0.0f, но я не знаю, как UITableView реагирует на это. Это может просто скрыть вид полностью. Предположительно, если вы хотите вернуть настраиваемое представление для одного нижнего колонтитула, вам необходимо вернуть настраиваемое представление для всех нижних колонтитулов.

3 голосов
/ 23 февраля 2012

Как уже упоминалось, нет такой вещи, как nil для поплавков.

Тем не менее, Отдел Уродливых Хаков приносит вам: NaN - «NaN», являющийся специальным зарезервированным значением шаблона битов с плавающей точкой, представляющим «Не число».

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

Если вы никому не скажете, откуда у вас идея, вот код:

CGFloat myNan = nanf(NULL);
2 голосов
/ 23 февраля 2012

Краткий ответ: нет.

Длинный ответ: 'nil' - это указатель на ничто, используемый вместо указателя на объект.CGFloat является скалярным типом данных, а не классом Objective-C, и обычно не используется с указателями (или это будет CGFloat *).

0 голосов
/ 05 июля 2017

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

Как говорили другие, вы не можете вернуть nil для примитивов, но вы можете сделать одно из двух, чтобы отличить ненулевое значение отнабор один.

  1. Использование NSNotFound

    - (CGFloat)calculateHeight {
       // calculate height...
    
       if (heightInvalid) return NSNotFound;
       else return validFloatValue;
    
    }
    

NSNotFound - это огромное число, определенное Apple и используемое ими в некоторых операциях,Затем вы можете проверить это, например:

if ([self calculateHeight] == NSNotFound) ... 
Используйте NSNumber

Вместо возврата CGFloat сделайте так, чтобы ваша функция возвращала NSNumber.

      - (NSNumber *)calculateHeight {
         // calculate height...

         if (heightInvalid) return nil;
         else return @(validFloatValue);

      }

Затем вы можете вернуть ноль.

При получении значения вы делаете:

NSNumber *myHeightNumber = [self calculateHeight];
if (!myHeightNumber) NSLog(@"height is invalid... do something");
else myHeight = [myHeightNumber floatValue];

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...