Как можно назначить Float64 переменной NSInteger? - PullRequest
0 голосов
/ 08 декабря 2018

Как эта функция может работать?

- (NSInteger)selectFpsForFormat:(AVCaptureDeviceFormat *)format {
  Float64 maxSupportedFramerate = 0;
  for (AVFrameRateRange *fpsRange in format.videoSupportedFrameRateRanges) {
    maxSupportedFramerate = fmax(maxSupportedFramerate, fpsRange.maxFrameRate);
  }
  return fmin(maxSupportedFramerate, kFramerateLimit);
}

, потому что return fmin(maxSupportedFramerate, kFramerateLimit); это float64, а не NSInteger?

Ответы [ 2 ]

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

Чтобы быть более понятным, вы можете добавить явное приведение:

return (NSInteger)fmin(maxSupportedFramerate, kFramerateLimit);

Но это не меняет поведение, поскольку это будет сделано автоматически, как объяснил Роб.

0 голосов
/ 08 декабря 2018

Поскольку Objective-C - это C, а спецификация C гласит:

6.3 Преобразования

6.3.1 Арифметические операнды

6.3.1.4 Действительное и плавающее целое число

1 Когда конечное значение реального плавающего типа преобразуется в целочисленный тип, отличный от _Bool, дробная часть отбрасывается (т. Е. Значение усекается до нуля).Если значение неотъемлемой части не может быть представлено целочисленным типом, поведение не определено.

См. Также определение оператора return, почему в этом случае применяется арифметическое преобразование:

6.8.6.4 Оператор return

3 Если выполняется оператор return с выражением, значение выражения возвращается вызывающей стороне в качестве значения выражения вызова функции.Если выражение имеет тип, отличный от типа возврата функции, в которой оно появляется, значение преобразуется, как если бы оно было присвоено объекту, имеющему тип возврата функции.

И затемпрочтите 6.5.16.1.3 Простое задание .... вы можете продолжать спускаться по кроличьей норе в спецификации, настолько глубоко, насколько вам нравится.: D

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

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