在 Objective C 中重构显式的 getter 和 setter
Refactor out explicit getters and setters in Objective C
我目前正在重构一些 Objective-C 代码以删除显式的 getter 和 setter。
所以这个:
[instance member]
[instance setMember:value]
应该变成这样:
instance.member
instance.member = value
目前正在为此开发正则表达式,但如果已经解决了这个问题,我将不胜感激利用其他人的工作成果。
要将所有 [instance setMember:value];
调用转换为 instance.member = value;
,请使用 Xcode 的重构:Edit > Refactor > Convert to Modern Objective-C语法。如果适用,它还会转换 getters,例如 variable = [instance member];
调用到 variable = instance.member;
语法。
我可能误解了你的意图,但我想指出使用 instance.member;
是不好的风格 如果你没有将值赋给变量.如果您因为副作用而调用方法,请改用 [instance method];
以使意图更清楚。仅使用点语法来实际读写属性以避免混淆。
Xcode 如果你有一个返回值的 method/property 并且你在调用 getter 而不将其分配给变量(如 viewController.view;
或 [viewController view];
) 因为假定此调用是错误的。为了摆脱你得到的警告,你需要明确地告诉编译器你这样做是为了副作用(例如,为了确保 XIB 被加载)通过强制转换为 void
,如在 (void)[viewController view];
.
要转换一些重构遗漏的 setter,恐怕您可能需要手动转换它们。要找到它们,请转到 查找导航器 (Cmd-3),select 查找 > 正则表达式 。使用正则表达式 \[\[\w+\s+\w+\]\s+set
(不幸的是,您不能简单地使用正则表达式转换这些调用,因为您需要转换一个字符:[foo setBar:123]
需要转换为 foo.bar = 123
,这意味着B
需要转为小写 b
)。您可以为执行必要转换的上下文菜单编写一个服务(请参阅 top answer to "Sort Lines in Selection" for Xcode 4 如何编写此类服务)以稍微加快该手动任务。
我目前正在重构一些 Objective-C 代码以删除显式的 getter 和 setter。
所以这个:
[instance member]
[instance setMember:value]
应该变成这样:
instance.member
instance.member = value
目前正在为此开发正则表达式,但如果已经解决了这个问题,我将不胜感激利用其他人的工作成果。
要将所有 [instance setMember:value];
调用转换为 instance.member = value;
,请使用 Xcode 的重构:Edit > Refactor > Convert to Modern Objective-C语法。如果适用,它还会转换 getters,例如 variable = [instance member];
调用到 variable = instance.member;
语法。
我可能误解了你的意图,但我想指出使用 instance.member;
是不好的风格 如果你没有将值赋给变量.如果您因为副作用而调用方法,请改用 [instance method];
以使意图更清楚。仅使用点语法来实际读写属性以避免混淆。
Xcode 如果你有一个返回值的 method/property 并且你在调用 getter 而不将其分配给变量(如 viewController.view;
或 [viewController view];
) 因为假定此调用是错误的。为了摆脱你得到的警告,你需要明确地告诉编译器你这样做是为了副作用(例如,为了确保 XIB 被加载)通过强制转换为 void
,如在 (void)[viewController view];
.
要转换一些重构遗漏的 setter,恐怕您可能需要手动转换它们。要找到它们,请转到 查找导航器 (Cmd-3),select 查找 > 正则表达式 。使用正则表达式 \[\[\w+\s+\w+\]\s+set
(不幸的是,您不能简单地使用正则表达式转换这些调用,因为您需要转换一个字符:[foo setBar:123]
需要转换为 foo.bar = 123
,这意味着B
需要转为小写 b
)。您可以为执行必要转换的上下文菜单编写一个服务(请参阅 top answer to "Sort Lines in Selection" for Xcode 4 如何编写此类服务)以稍微加快该手动任务。