Обнуляемый в цели c - PullRequest
       2

Обнуляемый в цели c

3 голосов
/ 02 июня 2011

Есть ли способ сделать обнуляемую структуру в цели C, как в C #, вы можете использовать Nullable<T>?
Мне нужно, чтобы CGPoint было null, когда нет подходящего значения. Я не могу выделить случайное недопустимое значение для этого, например (-5000, -5000), потому что все значения действительны для этого.

Ответы [ 4 ]

8 голосов
/ 02 июня 2011

Что делать, если вы определяете CGPoint с помощью CGPointMake (NAN, NAN), аналогичной CGRectNull?Конечно, с NAN для координат, это еще не действительная точка.

3 голосов
/ 02 июня 2011

CGPoint - это структура, которая имеет несколько других правил в target-c, чем вы думаете. Вы должны прочитать о структурах в target-c.

Способ, которым это делается в большинстве случаев, состоит в том, чтобы обернуть структуру в объект, потому что для этого объекта может быть установлено значение null. NSValue обернет CGPoint.

NSValue * v = [NSValue valueWithPoint:CGPointMake(1,9)];
NSVAlue * vNull = [NSValue valueWithPointer:nil];
if([v objCType] == @encode(CGPoint)) printf("v is an CGPoint");
1 голос
/ 02 июня 2011

CGPoint - это перечисление, а не объект.Вы можете использовать CGPointZero или обернуть все свои точки внутри NSValue, которые являются объектами и могут быть нулевыми.

0 голосов
/ 19 декабря 2013

Ничто не мешает вам создать собственную структуру на основе CGPoint, аналогично тому, как работает C # 2.

struct NilableCGPoint { bool isNil; CGPoint point; }

Примеры использования:

// No value (nil)
NilableCGPoint myNilablePoint.point = CGPointZero;
myPoint.isNil = YES;

// Value of (0,0)
NilableCGPoint myNilablePoint.point = CGPointZero;
myPoint.isNil = NO;

// Value of (100, 50)
NilableCGPoint myNilablePoint.point = CGPointMake(100, 50);
myPoint.isNil = NO;
...