2013-05-21 3 views
2

У меня есть простой ViewController, полученный из UIViewController, к которому я добавил свойство переименования swipeDirection. В коде я обычно называю его self.swipeDirection, но в одном случае я замечаю, что ошибочно набрал self.SwipeDirection.Почему self.SwipeDirection работает, если свойство называется swipeDirection?

Если я перехожу к определению, я получаю правильную переменную, и код компилируется и работает правильно, поэтому я уверен, что используется правильная переменная.

.h файл

enum EScrollDirection 
{ 
    E_SCROLL_DIRECTION_NONE = 0, 
    E_SCROLL_DIRECTION_LEFT, 
    E_SCROLL_DIRECTION_RIGHT, 
    E_SCROLL_DIRECTION_UP, 
    E_SCROLL_DIRECTION_DOWN 
}; 
typedef enum EScrollDirection EScrollDirection; 
@interface ProcessingViewController : UIViewController <UIScrollViewDelegate> 
@property(nonatomic, assign)EScrollDirection swipeDirection; 
@end 

.m файл

- (void)scrollViewDidScroll:(UIScrollView *)sender 
{ 
    CGPoint offset = self.graphScrollView.contentOffset; 
    self.SwipeDirection = [self getScrollDirection:self.previousTouchPoint endPoint:self.graphScrollView.contentOffset]; 
// ... 
} 

ответ

3

В теории все свойства собраны в методе сеттер вызов со следующим правилом по умолчанию - сеттер имя для property является setProperty: (примечание 1-я буква имени свойства становится заглавной). Так как следующие строки кода

self.SwipeDirection = ... 
self.swipeDirection = ... 

компилируются в существующий метод сеттер

[self.setSwipeDirection:...] 

и так эквивалентной с точки зрения составителя.

Примечание - то же не работает (по умолчанию) метод получения и следующая строка не будет компилироваться:

NSLog(@"%d", self.SwipeDirection); 
+0

спасибо. Я знал, что сеттеры, которые назвали этот путь, но не представляли себе, что self.SwipeDirection был преобразован в метод setter, прежде чем синтаксис был проверен. Мне кажется, это неправильно! В любом случае, спасибо за быстрый и точный ответ. – Ant

Смежные вопросы