2014-12-27 4 views
-1

Для разговоров можно сказать, что у вас есть 5 поплавков, которые все хранятся в одном поплавке и все позиции изображения. Теперь, как бы я, если вообще возможно, посмотреть, какой из этих пяти поплавок равен 500, а если есть какие-либо поплавки, найдите, какие из них и дадут им новую позицию.Используйте один оператор if вместо нескольких

-(void)Position 
{ 
ObjectOne.center = CGPointMake(ObjectOne.center.x, 500); 
ObjectFour.center = CGPointMake(ObjectFour.center.x, 500); 

Float[1] = ObjectOne.center.y; 
Float[2] = ObjectTwo.center.y; 
Float[3] = ObjectThree.center.y; 
Float[4] = ObjectFour.center.y; 
Float[5] = ObjectFive.center.y; 
[self Cheaking]; 
} 

-(void)Checking 
{ 
if(Float[1 to 5] == 500) { 
Find objects which are equal. 
ObjectWhichIsEqual.center = CGPointMake(225, ObjectWhichIsEqual.center.y) 
ObjectWhichIsEqualTwo.center = CGPointMake(225, ObjectWhichIsEqualTwo.center.y) } 
} 

UPDATE: Вместо того, чтобы использовать поплавок я теперь с помощью NSNumber для каждой координаты и хранить их в NSMutableSet. Прямо сейчас я использую NSPredicate, чтобы узнать, есть ли какие-то числа, равные 500, однако я не могу использовать этот оператор if для этого. Причина, почему я использую один, если заявление, чтобы сделать это, потому что я должен буду делать нагрузки, если заявления, например:

if(ObjectOne.center.y == 500) { 
ObjectOne.center = CGPointMake(225, ObjectOne.center.y); 
} 

if(ObjectTwo.center.y == 500) { 
ObjectTwo.center = CGPointMake(225, ObjectTwo.center.y); 
} ect... 

Где, как это один, если заявление для всех, однако я не знаю, как закончить его.

-(void)Position 
{ 
ObjectOne.center = CGPointMake(0, 500); 
ObjectFour.center = CGPointMake (0, 500); 
NSNumber *one = [NSNumber numberWithFloat:ObjectOne.center.y]; 
NSNumber *two = [NSNumber numberWithFloat:ObjectTwo.center.y]; 
NSNumber *three = [NSNumber numberWithFloat:ObjectThree.center.y]; 
NSNumber *four = [NSNumber numberWithFloat:ObjectFour.center.y]; 
NSNumber *five = [NSNumber numberWithFloat:ObjectFive.center.y]; 

NSMutableSet *set = [NSMutableset setWithObjects:one, two, three, four, five, nil]; 
[self checking]; 
} 

-(void)Checking 
{ 
NSPredicate *pre; 
pre = [NSPredicte predicateWithFormat:"SELF == %i", 500]; 
[set filterUsingPredicate:pre]; //line not working 
if(pre == true) {find which objects are equal and move them // have no clue how to do this 
    } 
} 

Я знаю, что NSPredicate - это, вероятно, неправильный путь, так что есть что-то подобное, что решит эту проблему. Заранее спасибо!

+0

Это выглядит как хороший план. В чем проблема? – matt

+0

Является ли Float массивом? И вы только хотите узнать, равны ли поплавки, если они равны 500? И куда входят координаты? Я не уверен, что понимаю ваш вопрос ... –

+0

Float - это 1D массив - или, по крайней мере, я думаю - float Float [5]; - –

ответ

1

Это объект вы хотите ссылаться не на float. Даже когда вы получаете поплавок, равный 500, нет способа ссылаться на объект . Лучше поместить объекты в NSMutableArray или NSMutableSet, а затем вы можете выполнить итерацию через каждый объект соответственно. Вы также можете получить размер коллекции, что упростит работу.

Только предложение - (как лично я стараюсь избегать подхода опроса)

В зависимости от того, что именно вы пытаетесь сделать, рассмотрит переопределение сеттера для центра собственности. (Возможно, вам нужно создать подкласс)

что-то вроде -

-(void)setCenter:(CGPoint)center { 
    // check if y == 500 here first and do what needs to be done... 
    if (center.y == 500) { 
      //do stuff... center.x = 250; etc... 
     } 
    _center = center; 
} 
Смежные вопросы