OC 체인 프로그래밍의 실천
@interface Person : NSObject
- (Person *)eat:(NSString *)food;
- (Person *)drink:(NSString *)water;
- (Person *)sleep:(NSInteger)hour;
@property (nonatomic, weak, readonly) Person *(^makeFriend)(NSString *name);
@property (nonatomic, weak, readonly) Person *(^learn)(NSString *name);
@end
#import "Person.h"
@implementation Person
- (Person *)eat:(NSString *)food {
NSLog(@"eat %@", food);
return self;
}
- (Person *)drink:(NSString *)water {
NSLog(@"drink: %@", water);
return self;
}
- (Person *)sleep:(NSInteger)hour {
NSLog(@"sleep: %ld hours", (long)hour);
return self;
}
- (Person * _Nullable (^)(NSString * _Nonnull))makeFriend {
return ^Person *(NSString *name) {
NSLog(@"make friend: %@", name);
return self;
};
}
- (Person * _Nullable (^)(NSString * _Nonnull))learn {
return ^Person *(NSString *name) {
NSLog(@"learn: %@", name);
return self;
};
}
@end
#import
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = Person.new;
[[[p eat:@" "] drink:@" "] sleep:3].learn(@" ").makeFriend(@" ");
}
return 0;
}
그러나 OC는 중괄호 호출 방식의 체인 프로그래밍을 사용하여 쓰기가 문법보다 편하지 않다.밑바닥에서 체인 프로그래밍을 지원하는 언어는 Fluuter의Dart 언어로 직접
obj..method1()..method2()..
이며, 이것은 언어의 밑바닥에서 직접 지원합니다.이런 코드를 쓰면 Swift가 OC보다 우세하다.우리는 이런 문법이 무엇을 할 수 있는지 알고 있습니까?Masonry는 바로 이런 사상을 이용하여 한 것이다.실제 업무에서 제 업무 경력 중 하나는 프로젝트에서 사용하는 것은 모두 OC입니다. 보기에 속성을 부여할 때 흔히 다음과 같습니다.
UIView *view = UIView.new;
view.backgroudColor = ...
view.frame = ..
...
당시에 나는 체인식 사상으로 글씨를 간략하게 쓸 수 있는지 생각했다. 설령 문법 사탕일지라도 여전히 재미있는 일이라고 생각해서 반나절의 시간을 들여 썼다. 그러나 OC가 범형에 대한 지원이 철저하지 않기 때문에 OC로 쓸 때 약간의 손발을 했고 마지막에 코드를 다음과 같이 조정했다.
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:UIButton.new
.dl_frame(CGRectMake(0, 0, 100, 100))
.dl_backgroundColor(UIColor.redColor)
.dl_titleColorForState(UIColor.whiteColor, UIControlStateNormal)
.dl_titleForState(@"Click me", UIControlStateNormal)
.dl_center(self.view.center)
.dl_cornerRadius(8)
.dl_clipsToBounds(YES)
.dl_addTargetAction(self, @selector(buttonClick:), UIControlEventTouchUpInside)];
}
저는 여기 제 이름으로'대유dl '접두사와 시스템 방법으로 구분하다.여기는 원본 코드 대실현입니다.
https://github.com/ACommonChinese/OCLinkSetProperty
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.