LinkBlock 3.0.2

LinkBlock 3.0.2

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布上次发布2018年10月

Novo维护。



LinkBlock 3.0.2

  • 作者
  • Novo

LinkBlock

LinkBlock icon

【简介/介绍】

  • LinkBlock是objc的链式编程语法糖扩展,可以压缩大量不需要阅读的代码
  • 学习成本低,因为它是Foundation API的搬运工
  • 持续维护,向后兼容
  • 废弃API将保留半年
  • objc的语法糖,它使用block减少不需要阅读的代码。
  • 易于使用,它是Foundation API的搬运工
  • 持续维护,向后兼容
  • 废弃的API将保留6个月

【导入】

  • 将目录LinkBlock拖放到项目中
  • #import "LinkBlock.h"
  • Pod支持。
#import "LinkBlock.h"

【概览】

举例/示例

NSLog(@"%@",object); 
==> object.nslog();

view.frame = CGRectMake(1, 2, 3, 4);
==> view.viewSetFrame(1, 2, 3, 4);

[self.view addSubview:view];
==> view.viewAddToView(self.view);

CGSize screenSize = [UIScreen mainScreen].bounds.size;
CGRect frame = view.frame;
frame.size.width = screenSize.width;
view.frame = frame;
==> view.objSetScreenValueForFullPath(@"frame->size->width");

[button setTitle:@"Text" forState:UIControlStateNormal];
==> button.btnTitleUIControlStateNormal(@"Text");

[self.view addSubview:viewA];
[self.view addSubview:viewB];
[self.view addSubview:viewC];
==> linkObjs(viewA,viewB,viewC).viewAddToView(self.view);

【A-B-C-D】

基础镜象

  • 这些模块是从Foundation复制过来的。
  • 有相同的参数和返回值。
...strAppend(~)...
...objValueForKey(value,key)...

B 基础速度

  • 已经为一些常见参数填充了值。
  • 包含一些最基本的函数。
...viewHiddenYES()...
...arrSort(~)...

C 基础扩展

  • 提供了一些应该有的API。
  • 包含一些最基本的函数。
...strLengthASCII()...
...imgOrientationFix(~)...
...viewAddToView(~)...

D 弱编码/弱类型编码

  • 这些API使得对象类型不再重要,只需要关注函数。
  • 一些API提供了跨类型转换的能力。
...objAdd(~)...
...strToUIImage()...

【调用/Call】

Linkblock将返回本身或方法返回的值。

_NonnullObject.linkBlock0().linkBlock1().linkBlock2()...

linkObj(_NullableObject).linkBlock0().linkBlock1().linkBlock2()...

在获取返回值时使用linkEnd。如果不这样做,结果可能是不正常的。

  • LinkBlock返回NSNull而不是nil;
id getTheValue = ...linkBlockReturnAValue().linkEnd;

【名称/命名】

linkObject.< 类Kind + Function[+枚举][+参数][+其他] >

_NonnullObject.btnTitleUIControlStateNormal()...

参数顺序/参数顺序

  • 参数顺序与Foundation相同或由方法名描述。

标准/写法规范

///Important content is in '<>';

_NonnullObject.linkBlock()...;

<linkObj(_NullableObject)>.linkBlock()...;

id getValue = ...linkBlockRerutnValue().<linkEnd>;

强制类型声明/强制类型声明

  • 规则:as+ClassName
NSString text = ...linkBlockRerutnUIView().asUILable.text;
[idObject asUILable].text;

链接指示/链条指示

  • 当linkBlock对象已更改时,使用此块以引起注意,并便于阅读。
  • 链接指示不会做任何事情,它只是返回self。
1.
...linkBlockReturnNotSelf().<thisValue>.someBlock()...;
Use `thisValue`,`thisValues`,`thisNumber` to indicate that linkBlock object has changed.
/指示链条对象变更

2.
linkObjs(...).thisLinkObjs...
Use `thisLinkObjs`,`thisLinkObj` to indicate state of link./指示链条状态

3.
...linkBlockRerutnANumber<As>().<aBOOLValue>...;
All linkBlock return NSNumber value it has suffix 'As'.
Use block named `a+TypeObject` to draw attention./指示NSNumber类型

4.
...linkBlockRerutn<AsWhatSet>(parameterToSet).whatSet...;
If linkBlock return value is parameters of itself ,it has suffix 'AsWhatSet'.
Use `whatSet` to indicate that next linkObj is the parameters of previous linkObj. 
/指示链条对象被切换到参数

Refer to `NSObject+LinkBlock.h`

【链接对象/多对象】

将链接对象合并为一个,更高效。/超效率

linkObjs(viewA,viewB,...)...viewAddToView(self.view);

//Hide one view and show others.
linkObjs(viewA,viewB,...).viewHiddenYES().linkAt(selectedIndex).viewHiddenNO();

linkObjs编解码

Create linkObjs
linkObjs(a,b,c...).thisLinkObjs...;//Main/主要

@[a,b,c...].makeLinkObjs.thisLinkObjs...;//Minor/次要

a.linkPush(b).linkPush(c).thisLinkObjs...;//Minor/次要

Get result
NSArray *getResultInArray = linkObjs...linkEnds;//主要

修改链接对象

1.
...<linkPop()>.thisLinkObjs...
Remove last link object from linkObjs

2.
linkObjs...<linkAt(index)>.thisLinkObj...
Get linkObj from linkObjs and return it as next linkObj.

3.
...linkLoop(count,^(NSObject* loopObject,NSUInteger idx){
    loopObject.objAdd(~);
})...
Repeat execute the code using block.

*/

【简单条件】

...aNumberValue.linkIf...linkElse...;

...aNumberValue.linkIf_YES...LinkElse...;

///Force return/强制返回
id resultFromLinkBlock0 = ...linkIf_YES...linkReturn...LinkElse...linkEnd;

【其他】

  • 【调用外部项目方法】
person.objPerformSelectorsWithArgs(~);
  • 【LinkError】
If there is no need to crash LinkBlock tends to printed the error by NSLog./无必要则不崩溃
LinkError can response to unknown method and not crash./可以响应未知方法而不崩溃
This feature make linkBlock more secure./更加安全
When unknown method called it will do noting but log itself./响应未知方法时会打印错误信息


Kind of Error:

1.call linkBlock from `nil`
2.Type error 
3.Parameters error


1: Use linkObj(~) to create a secure object.
2,3: This error would be printed by NSLog.

作者

【实验性的/Experimental】

通过脚本执行linkBlock;/脚本解析

  • 描述/Descripition
4 ways:

1.
script.linkCodeEval(targetObject,arg...);

2.
targetObject.linkEvalCode(script,arg...);

3. 
EvalLinkBlock(@"代码");//Execute script directly;

4. 
EvalLinkBlockWithTarget(targetObject,arg...);

详细/Detail

DynamicLink used like linkBlock
1."...actionName()..."The actionName wiil called as linkBlock
2."...actionName...".The actionName will called as property > non-argument method > LinkBlock command

LinkBlock command/命令:
1.CreateCommand:"ClassName+New";
2.LinkBlock macros,like 'NSNil','AttrDictNew'

note:DynamicLink did not suport the function that use argument list.If do it,system will recive only one agument,This will cause potential differences./不支持不定参数方法,否则只接收一个参数


direct value/直接量:
direct value used in '()'.Like:"actionName(3.1415926)"
suport types:number||HexNumber,String,Boolean,c string,char,NSNumber,SEL,struct in NSValue,Class;
Reference:DynamicLinkArgument.h

note:1.If set actionName or func as direct value,it must be non-argument func/方法的直接量必须是无惨的
2.cannot have double quotes in a string/字符串中不再用双引号


Entry order/入参顺序:
One-to-one correspondence/一一对应关系
script:"actionName($0 , 3.14 , $1)" => argument list:($0 , $1)
Only suport set arguments to outer layer,to inner layer func should use direct value.
In argument list use NSNil instead nil,or use direct value nil or NULL in script

return type:In dynamicLink all return type has been boxed./所有返回值都是装箱的