我希望以下代码产生关于隐式声明函数的警告:
@interface TestClass : NSObject
@end
@implementation TestClass
- (void)foo {
NSString *test = [self bar];
NSLog(@"%@", test);
test = baz();
NSLog(@"%@", test);
}
- (NSString *)bar {
return @"bar";
}
NSString *baz() {
return @"baz";
}
@end
具体来说,我希望在声明之前警告有关同时使用bar
和baz
的警告。 (bar
将被视为返回id
,baz
将被视为返回int
。)
GCC显示两个警告,LLVM的Clang 2.9也是如此。然而,Clang 3显然可以发现bar
和baz
存在以及它们返回的内容。 不显示警告(除非删除了这些功能)。
(当在类之外声明baz
时,仍会出现警告。所以这只适用于Objective-C!)
太棒了!这样可以删除大量重复内容。但是发生了什么?这是语言扩展吗?它是编译器功能吗?这是一个错误吗?或者我错了吗?我找不到任何关于此的文档,所以我很谨慎依赖它。 有人有任何见解吗?
答案 0 :(得分:2)
iOS 6文档(现在出自NDA)最终包含对此功能的正式确认。
它被称为“@implementation block中不需要前向方法原型”,需要Xcode 4.3 (LLVM编译器3.1)并且与所有iOS版本兼容。
Objective-C Feature Availability Index
该页面列出了编译器和Objective-C的最新改进以及它们可用的constellatons。
答案 1 :(得分:1)
几周前苹果公司的名单上出现了这个问题。这是一个新功能。还有一些其他的事情发生了:
NSArray* myArray = @[ @"foo", @"bar", @"baz"];
作为
的语法糖NSArray* myArray = [NSArray arrayWithObjects: @"foo", @"bar", @"baz", nil];
(嗯,这不是一个直接的翻译)。
另外,我认为会有
array[i]
代表
[array objectAtIndex: i];
并且字典会有相应的扩展名。