Любой способ это исправить?
не легко.утверждения (как вы упомянули) являются отправной точкой.
Я изменил свою сигнатуру функции, чтобы передать объект NSString вместо объекта NSNumber.
objc неработать так - объекты objc просто передают адреса через свои аргументы / переменные при исполнении.
при преобразовании типов явное преобразование типов не обеспечивается языком;в случае, если это было ваше ожидание.
и objc не использует типизированное приведение, чтобы определить, является ли аргумент того типа, к которому он приведен.
За исключением некоторых случаев, когдапо-прежнему передать старый объект NSNumber.Трудно отследить, потому что компилятор не отображает никаких ошибок или предупреждений по этому поводу.Я попытался удалить папку DerivedData.Не помогает.
вы получаете NSNumbers, потому что это то, что существует в массиве.
Я также пытался выполнить анализ, который также не улавливает эти проблемы.
это очень динамичный язык, и именно так он был спроектирован.
анализатор не может обнаружить эти проблемы или искать их, потому что проверка должна выполняться во время выполнения.
также, это обычное дело передавать объекты objc и использовать их динамически (используя respondsToSelector:
и isKindOfClass:
).
Я знаю, что могу сделать проверку NSAssert, чтобы убедиться,что тип входящего параметра правильный, но это кажется задом напередЭто должно быть что-то, что компилятор подхватывает и предупреждает меня.
Я использую утверждения и написал несколько проверок и типов, чтобы вернуть безопасность типов там, где я хочу.
Я знаю, что нетПубличная библиотека для этого - вы, вероятно, самостоятельно осуществляете необходимые проверки.создать простой заголовок для этих проверок и реализовать их достаточно просто.
За исключением того, что объект является NSNumber, поэтому технически он преобразует NSNumber в NSString.Отладчик видит его как NSNumber, поэтому не уверен, почему он в первую очередь разрешен.
для переменных objc, отладчик оценивает объект по адресу, чтобы определить его тип, а не использовать тип, объявленныйпеременная.