可能重复:
Semicolon after the method name in Objective-C implementation file
我注意到了两者
- (void)encodeWithCoder:(NSCoder *)aCoder;
{
}
和
- (void)encodeWithCoder:(NSCoder *)aCoder
{
}
作品。
使用;虽然有点尴尬。为什么;作品超出了我的范围。不适用于C ++
事情something;
应与something{};
等效,因此something ;{}
应与something {};{}
等效,这是错误的。
例如if(true)a = b;与if(true){a = b};
相同答案 0 :(得分:3)
编译器忽略分号,这只发生在函数名称上。当人们尝试将函数名称从.h(接口)复制到.m(实现)文件时,就会发生这种情况。我在使用目标c时也观察到了相同的情况。
答案 1 :(得分:2)
正如Brad Larson在his answer here中所说:
是的,这样做是可以接受的语法。
事实上,我总是在我的实现中这样做,因为它就是 从界面复制和粘贴方法定义是微不足道的 实现,反之亦然,而不必记住你在哪里 是。我也可以在单独的行上使用对齐的括号。
同样,Yuji states:
在语法上可以在那里放一个分号。它没用, 并且不鼓励这样做。一些编译器发出警告 这个额外的分号。
C / C ++ / Java对待;作为语句的结尾,所以每当编译器发现它将它视为行尾时。
编辑:
if(true) a=b;
与if(true){a=b};
这些不能与上述进行比较。 a=b
是一个必须以分号结束的表达式。因此,if(true) a=b;
是正确的。 if(true){a=b;}
是正确的。但if(true) {a=b};
不是,{和}创建一个包含未终止表达式的块,产生语义错误,因此编译器会说ERROR。
答案 2 :(得分:2)
是,
- (void)encodeWithCoder:(NSCoder *)aCoder;
{
}
和
- (void)encodeWithCoder:(NSCoder *)aCoder
{
}
两者都有相同的含义。
实际上编译器会在函数
之后忽略;
即使你写了
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
}
作为
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
{
}
它有效!