Я как бы потерялся в этом предмете свойств объекта. Идея моего приложения состоит в том, чтобы иметь ряд функций в ViewController и хранить их с помощью указателя на функцию (* attack) в классе (враге). Проблема заключается в передаче объектов по ссылке на эту функцию.Какие свойства выбрать для передачи Классы функции
два класса: противника и игрок (NSObjects)
enemy.h
@property void (*attack)(Class *enemy, Class *player, int); // synthesized
ViewController.h
@interface ViewController : UIViewController { player *player1; enemy *monster1; } @property enemy *monster1; @property player *player1;
ViewController.m
void attack1(enemy *attacker,player *target, int x) { target.health = target.health - x; NSLog(@"%i",target.health); } @implementation ViewController @synthesize player1; @synthesize monster1; - (void)viewDidLoad { [super viewDidLoad]; self.player1 = [[player alloc] init]; self.monster1 = [[enemy alloc] init]; player1.health = 100;
The follwing два заявления не работает:
monster1.attack = attack1; //Error 1 (yellow) monster1.attack(&monster1,&player1,20); //Error 2 (red)
Ошибка 1 говорит: «Несовместимые типы указателей относящих«пустоты (*) (__ unsafe_unretained Класс *, __unsafe_unretained Класс *, int) 'from' void (враг * _ сильный, игрок * _strong, int) '"
Ошибка 2 говорит: «Передача„игрок * __ сильными *“для параметра типа„__unsafe_unretained Класса *“изменения сохранить/релиз свойство указателей» (2 раза)
Я попытался перестановками Положив __unsafe_unretained в функцию в враге.h или (неатомное, назначить) после @property, но ничего не работает.
Спасибо! Программа работает (пока).И да, есть много, чтобы узнать для меня, я знаю :) – user2583450
не только это, он использует 'Class *', который является указателем на указатель на объект класса, поэтому он неверен на нескольких уровнях – newacct