Intereting Posts

Переопределить сеттер в объективе-c

Я хочу установить NSDate из NSInteger и у меня есть @property :

@property (strong,nonatomic) NSDate *date;

Я хочу сеттер:

 -(void)setDate:(NSInteger *)tStamp { thumbImgUrl = [NSDate dateWithTimeIntervalSince1970:tStamp]; } 

Поэтому я хочу установить дату из значения NSInteger не значение NSDate . Как я могу объявить этот сеттер? Когда я пытаюсь поместить его в файл заголовка, он работает нормально, но я получаю предупреждение:

Type of property 'date' does not match type of accessor 'setDate:

И если я хочу объявить его в файле .m, я получаю ошибку:

duplicate declaration of method setDate:

Зачем? Есть способ объявить сеттер с другим типом ввода?

Как правило, это очень плохой способ делать вещи в Objective-C, и я настоятельно рекомендую вам изменить имя метода на что-то еще, например -(void)setDateWithInteger:(NSInteger)tStamp . (Говоря об этом, NSInteger является примитивным, а не объектом). И чтобы ответить на ваш вопрос, нет, нет способа объявить сеттер с другим типом ввода, если вы используете @property . Если вы настаиваете на том, чтобы делать это по-своему, вам придется объявить метод, не используя @property .

Вы можете принять тип id в качестве входного параметра функции setter.

Вы получаете duplicate declaration of method setDate: потому что, скорее всего, у вас есть строка @synthesize date в вашем файле реализации. Это автоматически создает для вас геттер / сеттеры. Удалите эту строку, поскольку вы предоставляете свою собственную реализацию.