参考 http://www.cocoachina.com/ios/20160127/15097.html

在Xcode菜单中,选择Edit -> Refactor可以看到功能菜单。 或者直接在 .h.m文件点击右键也可能看到。

2017052078569img1.png

利用它可以方便用户实现代码修改、重构,提高开发效率。

  • Rename
  • Extract
  • Create Superclass
  • Move Up…
  • Move Down…
  • Encapsulate

Rename

对类名、方法名等进行重命名。修改完支持预览功能。

比如对MyViewController类进行改名:

201705201433img2.png

2017052049736img2.1.png

2017052037805img3.png

Extract

将代码提取为methodfunction

- (void)viewDidLoad {
    [super viewDidLoad];    
    _myLabel = [UILabel new];
}

尝试将_myLabel = [UILabel new];抽取出来: 选中 -> 右键 ->Rector->Extract

2017052025500img4.png

抽取结果如下,非常实用。

- (void)extracted_method {
  _myLabel = [UILabel new];
}
- (void)viewDidLoad {
    [super viewDidLoad];
    [self extracted_method];
}

如果选择了function,就是另外一种格式。(注:Xcode8.1测试了下,闪退了,不知道是不是Xcode的bug)

Create Superclass

就是创建一个当前类的父类。要注意的是要选中类名的时候才能成功触发。 需要注意的是预览界面最左边的导航区,选择中间一个是这次重构会影响到文件列表。可以点击到这个tab下查看其它类的改动。

操作类似,但是能选择创建是不是需要创建单独文件。

2017052060860img5.png

Move Up & Move Down

Move Up:可以将一个方法、实例变量移动到父类中去。触发时和重命名一样,要选中*实例名或者方法名后才能正常使用。在category中不适用。

Move Down:相反,将选中的实例变量移动到子类中。是的,方法就不能移到子类了。逻辑上很难理解为什么是这样。但是苹果爸爸就是这么任性。

Encapsulate:封装

这是一个令人怀念的词,多年后看到还是会想起期末考试里面向对象三大特点的填空题。 这个的作用是在你选中一个变量后,会自动帮你生成get、set方法。

2017052096657img6.png

可编辑名称 2017052087689img7.png

其他

不支持Swift,非常遗憾。 2017052120317123.png

xcode9开始支持