我目前正在重构一些Objective-C代码以删除显式的getter和setter。
所以这个:
[instance member]
[instance setMember:value]
应该成为这个:
instance.member
instance.member = value
目前正在制作一个正则表达式,但如果已经解决了这个问题,我会很感激利用别人的工作。
答案 0 :(得分:3)
要将所有[instance setMember:value];
来电转换为instance.member = value;
,请使用Xcode的重构: 编辑>重构>转换为现代Objective-C语法 。如果适用,它还会转换getter,例如variable = [instance member];
调用variable = instance.member;
语法。
我可能会误解你的意图,但是我想指出,如果你没有将值赋给变量,使用instance.member;
是错误的样式 >。如果您因为它的副作用而调用方法,请使用[instance method];
来使意图更清晰。仅使用点语法来实际读取和写入属性以避免混淆。
Xcode 6.3实际上会警告您,如果您有一个返回值的方法/属性,并且您在不将其分配给变量的情况下调用getter(如viewController.view;
或{{1因为它假设这个调用是错误的。要摆脱你得到的警告,你需要通过强制转换为[viewController view];
来明确地告诉编译器你正在为副作用做这件事(例如,确保加载XIB) ,如void
。
为了转换某些制定者,重构错过了,你可能需要手动转换,我很害怕。要找到它们,请转到查找导航器(Cmd-3),选择查找>正则表达式。使用正则表达式(void)[viewController view];
(遗憾的是,您无法使用正则表达式转换这些调用,因为您需要转换一个字符:\[\[\w+\s+\w+\]\s+set
需要转为[foo setBar:123]
这意味着foo.bar = 123
需要转为小写B
)。您可以为进行必要转换的上下文菜单编写服务(请参阅top answer to "Sort Lines in Selection" for Xcode 4如何编写服务等)以加快手动任务的速度。