2014-09-23 1 views
-1

говорят, у меня есть некоторые Objective-C, как это:можно ли отключить автоматическое продвижение типа в Objective-C

- (void) foo:(double)doubleVal; 

есть способ, чтобы сделать следующий код не будет компилироваться:

int integerVal; 
[self foo:integerVal]; 

, имея этот код успеха:

double doubleVal; 
[self foo:doubleVal]; 

?

В идеале я мог бы сделать это только для foo, по сравнению с глобальным.

заранее спасибо, Orion

+1

Любопытно, почему вы хотите, чтобы он потерпел неудачу? 'double' может обрабатывать любое значение' int'. – rmaddy

+0

хороший Q. это потому, что я сделал рефакторинг, который не только изменяет тип этого параметра, но и ожидаемый диапазон. В частности, как int, диапазон составлял 0 - 255, а в виде double - 0.0 - 1.0. У меня есть куча кода, который нужно преобразовать в соответствие, и было бы замечательно, если бы компилятор использовал все прецеденты для меня. –

+0

С таким рефакторингом я бы сохранил старый метод, а затем создал новый с немного другим именем. Новый берет 'double', а старый берет' int'. Это предотвращает нарушение существующего кода. Теперь вы можете изменить код, чтобы использовать новый метод (и новый диапазон) по мере необходимости. Вы даже можете оставить весь старый код и изменить старый метод, чтобы просто вызвать новый метод после преобразования 'int' в новый' double'. – rmaddy

ответ

0

нет, я не понимаю, как вы можете отключить его. int может быть представлен как double just fine (например,), и я не думаю, что есть способ его отключить.

вопрос остается: Почему? Возможно, вам стоит пересмотреть свой дизайн.

, конечно, вы могли бы «подделать» его, используя специальные типы номеров повсюду: D
например. если у вас есть структура myInt и структура myDouble, это не изменит типы

+0

спасибо за ответ - почему, см. Мой комментарий выше. Я не уверен, что введение пользовательского типа номера на самом деле поймает это. - компилятор будет просто автоматически продвигать между настраиваемыми типами. –

+0

не будет, если они разные. если у вас есть структура myInt и структура myDouble, это не изменит типы –

+0

ah Я вижу, что вы имеете в виду. да, это может быть подход, спасибо! –