jamiechoo

 

Xcode开发效率-快捷键&代码块 重构代码的 5 个 Xcode 技巧

Keys

  • Shift + Command + O(字母O,而非0)弹出快速查找文件窗口。
  • Shift +Commond + 0(数字0,而非字母O)快速打开官方文档。
  • Shift + Comand + j 定位到文件所在目录,配合第一条快捷键使用。
  • Control + Command + 上\下 切换 .m 和.h。
  • Command + t 新建一个Tab(这个很实用,我平时一般都会建3,4个Tab)。
  • Command + w 关闭Tab。
  • Command + ` 切换同一个应用多个窗口。可以用来在多个Xcode窗口中切换。
  • Control + Command + e 可以批量修改光标所在位置的变量,像这样:
  • Mac如何使用快捷键使代码整体上下左右移动

    整体向右移动:Tab键 (tab键长这样⇥)
    整体向左移动:shift+Tab (shift键长这样⇧)
    整体向上移动:control+command+向上箭头
    整体向下移动:control+command+向下箭头

  • Shift + Command + f 打开全局搜索。(可以加个 Any 正则,就可以搜出如图中的这种)

  • Command + f 在类中搜索 (enter 匹配下一个 Shift + enter 匹配上一个)。
  • Command + 上\下\左\右 光标切换到类首/类尾/行首/行尾。
  • Shift + Command + 上\下\左\右 从当前光标所在选中到类首/类尾/行首/行尾的文本。
  • alt + 左\右 光标左右移动一个单词。
  • Command + delete 删除光标到行首的内容,同理alt + delete 删除光标前的一个单词,另外可以先切换到到行尾 用Command + delete删除一整行内容。
  • Control + i 自动缩进代码。
  • Command + \ 当前行加断点。
  • alt + Command + \,新建一个symbolic breakpoint。
  • Command + n新建文件 ,Shift + Command + n 新建工程。
  • alt + Command + 左\右 折叠\显示当前块。
  • Shift + alt + Command + 左\右 折叠\显示当前文件中的块。
  • alt + Command + [ 上移,如果没有选中,默认上移当前行,alt + Command + ] 下移。
  • Command + ] 向右缩进,支持多行,Command + [ 向左缩进。(类似Tab与shift+tab)。
  • Shift + Command + k product 清理;Command + r Run;Command + b 编译。

Xcode窗口控制

  • Shift + Command + Y 隐藏\显示 console 区。
  • Shift + Command + C 显示 console 区,且直接聚焦。
  • Command + k console清屏。
  • Control + 1 (没用过>,<)。

  • Control + 6 查看当前类的方法列表(可以用 pragma mark 来合理分块,查看更直观)。
  • Command + (1~9)切换左边窗体.Command + 0 显示 \ 隐藏左边窗体。
  • alt + Command + 0 显示 \ 隐藏右边窗体,同理alt + Command + 1,2等也可以切换。
  • Command + , 弹出 Perferences ,可以用 Command + w 隐藏。
  • Command + +(加号)/-(减号),放大/缩小整体页面。与Web端一致。

Code Snippet

选中编写好的代码块,右击选择 Create Code Snippet

参数说明:
  • Title: Code Snippet的名字,将作为主标题显示在列表中。
  • Summary: 说明,将作为副标题显示在列表中。
  • Platform: 平台,有All,iOS,watchOS,macOS和tvOS五个选项。
  • Language: 语言,有Objective-C,Swift等选项。
  • Completion Shortcut: 快捷键。
  • Completion Scopes: 匹配范围,比如说OC中一个类的代码块不该在另一个类中匹配出来,这样可以更加精确地匹配,这个选项可以多选。
  • 代码: 这就不用多说,直接在代码模块修改,但是这里相当于纯文本,建议验证后再保存。

Command + shift + L 打开所有代码块。

 
1
Tips: 代码段中可以使用<#placeHolder#>用于占位

补充Code Snippet示例

1
2
//property
@property (nonatomic, readwrite, strong) <#expression#> *<#expression#>;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//UICollectionView 
#pragma mark - UICollectionViewDataSource
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
    return <#number#>;
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return <#number#>;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    
    UICollectionViewCell *cell = (UICollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"" forIndexPath:indexPath];
    return cell;
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(<#number#>, <#number#>);
}

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
    return UIEdgeInsetsMake(<#number#>, <#number#>, <#number#>, <#number#>);
}

#pragma mark - UICollectionViewDelegate
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//attributeLabel
UILabel *attributedLabel =[[UILabel alloc] init];
attributedLabel.numberOfLines = 0;
attributedLabel.preferredMaxLayoutWidth = <#preferredMaxLayoutWidth#>;
attributedLabel.backgroundColor = [UIColor clearColor];
NSString *text = <#text#>;
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
style.lineSpacing = <#lineSpacing#>;
NSDictionary *attr = @{
					NSFontAttributeName: [UIFont <#font#>],
                   	NSParagraphStyleAttributeName: style,
                   	NSForegroundColorAttributeName: [UIColor <#color#>]
                   	};
attributedLabel.attributedText = [[NSAttributedString alloc] initWithString:text attributes:attr];
[<#view#> addSubview:attributedLabel];

重构代码的 5 个 Xcode 技巧

 

作为一名开发人员,有时重构代码比写代码的时间都要多,所以知道如何重构一段代码是开发者需要掌握的一项非常重要的技能之一。它还有很多的好处,例如:

  • 有了重构思维,我们从一开始就能有意识的去编写更简洁、更安全的代码
  • 提高代码的可测试性
  • 可以更好的进行 code review

另外,还有专门的书籍和网站去介绍如何进行代码重构。

所以,今天就来分享使用 Xcode 去重构代码的 5 个小技巧。

1. 批量重命名

给属性、参数、方法、类取个好名字不仅可以一看到名字就知道是干什么的,还有利于后期的维护和交接,想想如果变量名都是 test1、test2 之类的,当需求变更,再回头看代码,是有多么的糟心。

那如果想给它们更名,但是调用的地方又比较多,需要怎么重命名呢?有同学说全局替换,emmm... 不够优雅,而且容易替换错。

有两种重命名的场景:

  • rename 适合全局替换的场景。比如,某个方法被多个类调用。就可以使用 Xcode 自带的 rename 特性。只需要右键重命名的对象,即可调出 rename 特性。

点及 rename 后,Xcode 会搜索所有需要重命名的地方,搜索完成后会高亮显示。编辑高亮部分,点击右上角 rename 就重命名成功啦。

  • Edit All in Scope 适合重命名的对象只在当前文件中被使用。这种情况下,Xcode 只会搜索当前文件内需要重命名的地方,然后高亮显示。修改好后,回车即可重命名成功。

2. Generate Memberwise Initializer

特别是处理模块、sdk和一些库的时候,不能完全依赖于初始化程序的自动合成。很多时候,我们需要创建自己的公共初始化器,不过就需要复制粘贴各个属性,比较麻烦。还好,Xcode 有一个方便的特性,可以自动创建按成员变量顺序的初始化器。

右键需要 init 的类型,选择 Refactor,然后再选择 Generate Memberwise Initializer。

Xcode 使用 internal 关键字在类型声明的正下方创建初始化器。我们可以将关键字更改为 public (或者我们需要的值) ,然后在需要的地方剪切和粘贴。

3. Add Missing Switch Cases

有时我们定义的枚举的 cases 太多,如果对其遍历,手动写每个 case 势必会很浪费时间。那么有什么方法可以自动填充所有 case 呢?

对于 OC 来说,在写好 switch 语法后,右键 switch,既可选择 Add Missing Switch Cases 即可自动填充所有 case,真香~

但是还不够香,对于 Swift 来说,不用写 switch 语法,只需要输入 switch 枚举变量名,回车即可自动填充所有 case。

OC 快被抛弃了😭

4. 多行编辑

某些情况下,我们要在不同的代码行编写相同的代码,面向 CV 又不是那么的高大上。这时,我们就可以用非常炫酷的快捷键打法来实现。

比如,下面的演示动画,批量把元素加到当前 view 上。

  • 按住 option + shift 结合鼠标左键选择激活多行编辑
  • option 和 shift 别松开,点击右键,选中变量
  • 松开 option 和 shift,然后复制粘贴
  • 最后就可以批量输入相同的代码啦~

没有尝试过的小伙伴,动手试试吧~

5. Find Call Hierarchy

我们在看代码时,有时需要知道函数或变量被调用的所有位置。那么就可以右键方法名称,找到Find Call Hierarchy,在 Xcode 左侧就会出现该方法的调用层级。这样就很方便的知道代码是如何工作的。

结语

以上就是在重构和日常开发中,我觉得非常实用的几个小技巧啦。我也觉得熟练的运用开发工具,可以让我们的开发过程更加的舒服。小伙伴们不妨试一试哦~

 


作者:DamonLu
链接:https://juejin.cn/post/7025528600300371975

 

posted on 2024-09-12 16:59  jamiechoo  阅读(713)  评论(0)    收藏  举报

导航