$is_checked = isset($_POST['your_checkbox_name']) && $_POST['your_checkbox_name'] == 'on';
Оценка короткого замыкания позаботится о том, чтобы вы не получили доступ к
your_checkbox_name
, когда он не был отправлен.
Проблема в том, что CGPoint на самом деле является просто структурой C, но не объектом:
struct CGPoint {
CGFloat x;
CGFloat y;
};
typedef struct CGPoint CGPoint;
Если вы используете iPhone, вы можете использовать дополнения NSValue UIKit для преобразования CGPoint в объект NSValue. .
См. Этот предыдущий ответ с примерами: Как можно легко добавить объекты CGPoint в NSArray?
К сожалению, для вас CGPoint не является объектом Objective-c. Это структура c. если вы дважды щелкаете по Apple на CGPoint, вам следует перейти к определению
struct CGPoint {
CGFloat x;
CGFloat y;
};
typedef struct CGPoint CGPoint;
. Если вы хотите сохранить CGPoint в NSArray, вам нужно сначала обернуть их. Вы можете использовать NSValue для этого или написать свою собственную обертку.
см. . Преобразование CGPoint в NSValue.
. РЕДАКТИРОВАНИЕ> Для каждого вызова метода target-c требуются небольшие накладные расходы, а создание и уничтожение объектов включает в себя множество вызовов метода, прежде чем они даже используются. для всего. Вы не должны беспокоиться об этом обычно, но для очень маленьких объектов, которые инкапсулируют мало поведения и имеют короткий срок службы, это может повлиять на производительность. Если бы Apple использовала объекты для всех точек, прямоугольников, размеров и даже целых, плавающих и т. Д., Производительность была бы хуже.
Swift 3.x
// Преобразование CGPoint в NSValue
let cgPoint = CGPoint(x: 101.4, y: 101.0)
let nsValue = NSValue(cgPoint: cgPoint)
var array = NSArray(object: nsValue)
// Восстановить его снова
var cgPoint : CGPoint!
for i in array {
cgPoint = i as? CGPoint
}
Вы также можете сделать следующее:
[myArray addObject:[NSValue valueWithCGPoint:MyCGPoint]];
Простой способ обработать CGPoint
(или любую другую не унаследованную NSObject
структуру) - создать новый класс, унаследованный от NSObject
.
Код длиннее, но чистый. Ниже приведен пример:
@interface MyPoint:NSObject
{
CGPoint myPoint;
}
- (id) init;
- (id) Init:(CGPoint) point;
- (BOOL)isEqual:(id)anObject;
@end
@implementation MyPoint
- (id) init
{
self = [super init];
myPoint = CGPointZero;
return self;
}
- (id) Init:(CGPoint) point{
myPoint.x = point.x;
myPoint.y = point.y;
return self;
}
- (BOOL)isEqual:(id)anObject
{
MyPoint * point = (MyPoint*) anObject;
return CGPointEqualToPoint(myPoint, point->myPoint);
}
@end
Вот пример кода, показывающий использование, не забудьте выпустить !!!
//init the array
NSMutableArray *pPoints;
pPoints = [[NSMutableArray alloc] init];
// init a point
MyPoint *Point1 = [[MyPoint alloc]Init:CGPointMake(1, 1)];
// add the point to the array
[pPoints addObject:[[MyPoint alloc] Point1]];
//add another point
[Point1 Init:CGPointMake(10, 10)];
[pPoints addObject:[[MyPoint alloc] Point1]];
[Point1 Init:CGPointMake(3, 3)];
if ([pPoints Point1] == NO))
NSLog(@"Point (3,3) is not in the array");
[Point1 Init:CGPointMake(1, 1)];
if ([pPoints Point1] == YES))
NSLog(@"Point (1,1) is in the array");
Чтобы использовать ответ, данный atbreuer11, вы можете преобразовать CGPoint в NSValue, сохранить его в NSMutableArray и преобразовать обратно, используя следующее:
//Convert CGPoint and Store it
CGPoint pointToConvert = CGPointMake(100.0f, 100.0f);
NSValue *valueToStore = [NSValue valueWithCGPoint:pointToConvert];
NSMutableArray *arrayToKeep =[NSMutableArray arrayWithObject:valueToStore];
Затем восстановите его снова:
CGPoint takeMeBack;
for (NSValue *valuetoGetBack in arrayToKeep) {
takeMeBack = [valuetoGetBack CGPointValue];
//do something with the CGPoint
}
Это, наверное, самый простой способ сделать это. Вы можете написать полный класс и выполнять все виды манипуляций с данными, но я думаю, что это будет излишним, если вам не понадобится.