在Xcode10正式发布之后,原先位于编辑器右下角的代码块标识被放到右上角的状态栏里,点击 {}按钮之后会将所有的代码块弹出.
添加步骤
- 例如,我们想创建一个生成如下的代码块
/** <#注释#> */
@property (nonatomic,strong) <#Class#> *<#object#>;
首先,我们需要选中这句代码,然后右键 --> Create Code Snippet 这时系统就会自动生成一个代码块,如下入所示
然后,我们点击 {} 按钮 弹出代码块选择框,并将鼠标放置于刚才生成的代码块上,就会出现编辑框,这时我们就可以自定义代码块的 名称 和 快捷键,如下入所示
图中从上到下的含义依次是:
标题 | 含义 |
---|---|
Title | 代码片段的标题 |
Summary | 代码片段的描述文字 |
Platform | 可以使用代码片段的平台,有IOS/OS X/All三个选项 |
Language | 可以在哪些语言中使用该代码片段 |
Completion Shortcut | 代码片段的快捷方式,例:copy |
Completion Scopes | 可以在哪些文件中使用当前代码片段,比如全部位置,头文件中等,当然可以添加多个支持的位置。 |
最后的一个大得空白区域 | 对代码片段的效果预览。 |
一切设置完成以后,点击该菜单右下角的Done按钮,新建工作就结束了。
常用的属性
- assign
/** <#注释#> */
@property(nonatomic, assign) <#type#>;
- strong
/** <#注释#> */
@property (nonatomic,strong) <#Class#> *<#object#>;
- weak
/** <#注释#> */
@property(nonatomic,weak) <#class#> *<#name#>;
- copy
/** <#注释#> */
@property (nonatomic,copy) <#Class#> *<#object#>;
- block
/** <#注释#> */
@property(nonatomic,copy) <#MyBlock#> <#blockName#>;
- delegate
/** <#注释#> */
@property (nonatomic,weak) id<<#protocol#>> <#delegate#>;
GCD相关
- OnceGCD
+ (instancetype)shareInstance{
static dispatch_once_t onceToken;
static id instance = nil;
dispatch_once(&onceToken, ^{
<#code to be executed once#>
});
return instance;
}
- AfterGCD
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
<#code to be executed after a specified delay#>
});
- MainGCD
dispatch_async(dispatch_get_main_queue(), ^{
<#code#>
});
通知
- 添加通知
[[NSNotificationCenter defaultCenter] addObserver:<#(nonnull id)#> selector:<#(nonnull SEL)#> name:<#(nullable NSNotificationName)#> object:<#(nullable id)#>];
- 移除通知
[[NSNotificationCenter defaultCenter] removeObserver:self];
注释
- 属性注释 - explain property
/** <#注释#> */
- 函数内部注释 - explain single
// --<#说明#>
- 函数注释 - explain mark
#pragma mark - **************** <#输入注释#> ****************
其他
- Extension
这个是GNU C的对C的扩展语法 Xcode采用的Clang编译,Clang作为GCC的替代品,和GCC一样对于GNU C语法完全支持
你可能知道if(condition)后面只能根一条语句,多条语句必须用{}阔起来,这个语法扩展即将一条(多条要用到{})语句外面加一个括号(), 这样的话你就可以在表达式中应用循环、判断甚至本地变量等。表达式()最后一行应该一个能够计算结果的子表达式加上一个分号(;), 这个子表达式作为整个结构的返回结果
这个扩展在代码中最常见的用处在于宏定义中
({
<#init#>
<#code#>
<#instance#>;
});
- 按钮 - btn
({
UIButton *button = [UIButton buttonWithType:<#(UIButtonType)#>];
<#code#>
button;
});
- 标签 - label
({
UILabel *label = [[UILabel alloc]init];
<#code#>
label;
});
- 视图 - view
({
UIView *view = [[UIView alloc]init];
<#code#>
view;
});