Rac 매크로 작업
매개 변수뒤에 있는 하위 문자열입니다.없으면문자열 자체의 두 번째 인자를 취할 때 두 번째 인자의 문자열을 가져옵니다.두 개의 매개 변수, 첫 번째 매개 변수의 역할은 자동으로 OBJ를 보완하는 데 있다.PATH, 코드 자동 완성
define keypath(...) \
metamacro_if_eq(1, metamacro_argcount(VA_ARGS))(keypath1(VA_ARGS))(keypath2(VA_ARGS))
define keypath1(PATH) \
(((void)(NO && ((void)PATH, NO)), strchr(# PATH, '.') + 1))
define keypath2(OBJ, PATH) \
(((void)(NO && ((void)OBJ.PATH, NO)), # PATH)) keypath(self); //(((void)(__objc_no && ((void)self, __objc_no)), strchr("self", '.') + 1)) ;
keypath(self.view); // (((void)(__objc_no && ((void)self.view, __objc_no)), strchr("self.view", '.') + 1)) ;
keypath(self.view.backgroundColor); //(((void)(__objc_no && ((void)self.view.backgroundColor, __objc_no)), strchr("self.view.backgroundColor", '.') + 1)) ;
keypath(self, view.backgroundColor); // (((void)(__objc_no && ((void)self.view.backgroundColor, __objc_no)), "view.backgroundColor"));
keypath(self.view,backgroundColor); // (((void)(__objc_no && ((void)self.view.backgroundColor, __objc_no)), "backgroundColor"));
keypath(self.view.backgroundColor,CGColor); //(((void)(__objc_no && ((void)self.view.backgroundColor.CGColor, __objc_no)), "CGColor"));
1、 RACObserve RACObserve(self, kvoValue);
({ __attribute__((objc_ownership(weak))) id target_ = (self);
[target_ rac_valuesForKeyPath:@(((void)(__objc_no && ((void)self.kvoValue, __objc_no)), "kvoValue")) observer:self]; });
(((void)(NO && ((void)PATH, NO)), strchr(# PATH, '.') + 1))
define keypath2(OBJ, PATH) \
(((void)(NO && ((void)OBJ.PATH, NO)), # PATH)) keypath(self); //(((void)(__objc_no && ((void)self, __objc_no)), strchr("self", '.') + 1)) ;
keypath(self.view); // (((void)(__objc_no && ((void)self.view, __objc_no)), strchr("self.view", '.') + 1)) ;
keypath(self.view.backgroundColor); //(((void)(__objc_no && ((void)self.view.backgroundColor, __objc_no)), strchr("self.view.backgroundColor", '.') + 1)) ;
keypath(self, view.backgroundColor); // (((void)(__objc_no && ((void)self.view.backgroundColor, __objc_no)), "view.backgroundColor"));
keypath(self.view,backgroundColor); // (((void)(__objc_no && ((void)self.view.backgroundColor, __objc_no)), "backgroundColor"));
keypath(self.view.backgroundColor,CGColor); //(((void)(__objc_no && ((void)self.view.backgroundColor.CGColor, __objc_no)), "CGColor"));
1、 RACObserve RACObserve(self, kvoValue);
({ __attribute__((objc_ownership(weak))) id target_ = (self);
[target_ rac_valuesForKeyPath:@(((void)(__objc_no && ((void)self.kvoValue, __objc_no)), "kvoValue")) observer:self]; });
keypath(self); //(((void)(__objc_no && ((void)self, __objc_no)), strchr("self", '.') + 1)) ;
keypath(self.view); // (((void)(__objc_no && ((void)self.view, __objc_no)), strchr("self.view", '.') + 1)) ;
keypath(self.view.backgroundColor); //(((void)(__objc_no && ((void)self.view.backgroundColor, __objc_no)), strchr("self.view.backgroundColor", '.') + 1)) ;
keypath(self, view.backgroundColor); // (((void)(__objc_no && ((void)self.view.backgroundColor, __objc_no)), "view.backgroundColor"));
keypath(self.view,backgroundColor); // (((void)(__objc_no && ((void)self.view.backgroundColor, __objc_no)), "backgroundColor"));
keypath(self.view.backgroundColor,CGColor); //(((void)(__objc_no && ((void)self.view.backgroundColor.CGColor, __objc_no)), "CGColor"));
RACObserve(self, kvoValue);
({ __attribute__((objc_ownership(weak))) id target_ = (self);
2、 RACChannelTo RACChannelTo(self.view, backgroundColor) = RACChannelTo(self,sscolor);
[[RACKVOChannel alloc] initWithTarget:(self.view) keyPath:
@(((void)(__objc_no && ((void)self.view.backgroundColor, __objc_no)), "backgroundColor")) nilValue:(((void *)0))] [@(((void)(__objc_no && ((void)RACKVOChannel.new.followingTerminal, __objc_no)), "followingTerminal"))]
= [[RACKVOChannel alloc] initWithTarget:(self) keyPath: @(((void)(__objc_no && ((void)self.sscolor, __objc_no)), "sscolor")) nilValue:(((void *)0))]
[@(((void)(__objc_no && ((void)RACKVOChannel.new.followingTerminal, __objc_no)), "followingTerminal"))] ;
//아래 첨자 작업
@implementation RACKVOChannel (RACChannelTo)
3、 RAC
[[RACSubscriptingAssignmentTrampoline alloc] initWithTarget:(TARGET) nilValue:(NILVALUE)][@keypath(TARGET, KEYPATH)]
[[RACSubscriptingAssignmentTrampoline alloc] initWithTarget:(self.view) nilValue:([UIColor redColor])]
[@(((void)(__objc_no && ((void)self.view.backgroundColor, __objc_no)),
"backgroundColor"))]=a;
//아래 첨자 작업
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.