我目前正在重构一些Objective-C代码以删除显式获取者和设置者。在目标C中重构显式获取者和设置者C
所以这样的:
[instance member]
[instance setMember:value]
应该成为这样的:
instance.member
instance.member = value
目前正在为这一个正则表达式,但如果这已经解决了,我会很感激考虑别人的优点工作。
我目前正在重构一些Objective-C代码以删除显式获取者和设置者。在目标C中重构显式获取者和设置者C
所以这样的:
[instance member]
[instance setMember:value]
应该成为这样的:
instance.member
instance.member = value
目前正在为这一个正则表达式,但如果这已经解决了,我会很感激考虑别人的优点工作。
要让所有[instance setMember:value];
调用转换为instance.member = value;
,使用Xcode的重构:编辑>重构>转换成现代的Objective-C语法。如果适用,它还会将获取者转换为variable = [instance member];
调用variable = instance.member;
语法。
我可能会误解你的意图,但我想指出的是,使用instance.member;
是不良作风如果你不值赋值给一个变量。如果您因为副作用而调用方法,请使用[instance method];
来代替,以使意图更清晰。仅使用点语法来实际读取和写入属性以避免混淆。
的Xcode 6.3居然警告你,如果你有一个方法/属性,该属性返回一个值,你调用,吸气,而不将其分配给一个变量(如viewController.view;
或[viewController view];
),因为它是假设这个呼叫是错误。为了摆脱所得到的警告,你需要明确地告诉编译器,你正在做的副作用(例如,以确保XIB被加载)通过铸造到void
,如(void)[viewController view];
。
若要转换某些setter重构错过,您可能需要手动转换这些,恐怕。要找到它们,请转至查找导航器(Cmd-3),选择查找>正则表达式。使用正则表达式\[\[\w+\s+\w+\]\s+set
(不幸的是,不能简单地使用正则表达式转换这些调用,因为您需要转换一个字符:[foo setBar:123]
需要转换为foo.bar = 123
,这意味着B
需要转为小写b
)。您可以为上下文菜单编写一项服务,以进行必要的转换(请参阅top answer to "Sort Lines in Selection" for Xcode 4关于如何编写服务等)以加快该手动任务的速度。
正在调查。在预加载viewController时,关于'(void)'的注释已经解决了警告。 – escapecharacter 2015-04-01 19:31:45
嗯...... *转换为现代Objective-C语法*抓住了一些东西,但没有抓住我想要的一切。它传递了诸如'[[self collider] setHidden:YES]';' – escapecharacter 2015-04-01 20:24:33
无赖。我已经更新了我对这个问题的建议。 – DarkDust 2015-04-02 07:31:03
为什么?这对你来说是非常重要的风格吗? – Wain 2015-04-01 18:35:10
它比必要的更冗长。它是一个样本代码,可以在内部和外部无处不在复制/粘贴。 – escapecharacter 2015-04-01 18:36:10
编译器具有这样的信息,因为当有人使用点语法时,它会做相反的处理;同样你也必须解析一般情况下的属性声明,因为访问器可以被重命名。 – 2015-04-01 18:44:22