Преобразование между типами в Objective-C - PullRequest
3 голосов
/ 07 июня 2009

Будучи начинающим разработчиком Objective-C, и у меня не хватило терпения на самом деле заняться изучением, а не просто углубляться в вещи, я столкнулся со следующим:

У меня есть CGFloat, и я хочу разделить его на что-нибудь и использовать результат как NSInteger.

Пример:

CGPoint p = scrollView.contentOffset; //where p is a CGFloat by nature
NSInteger * myIndex = p.x/468.0;

При компиляции я получаю сообщение об ошибке: «Несовместимые типы при инициализации». Я думаю, это из-за несоответствия между CGFloat и NSInteger.

Что я должен знать, чтобы выбраться из этого? Извините за беспокойство.

Ответы [ 2 ]

7 голосов
/ 07 июня 2009

Две проблемы. Вы используете указатель NSInteger (NSInteger * myIndex). И вам понадобится приведение, чтобы перейти от float к int. Вот так:

NSInteger myIndex = (int)(p.x / 468.0);
4 голосов
/ 07 июня 2009

NSInteger не является действительным типом объекта. Это typedef для примитивного целочисленного типа. Удалите * и ваш пример должен работать. Как и сейчас, вы пытаетесь присвоить результат вашей математики в качестве указателя, и вы получаете это сообщение об ошибке.

...