为什么我不能在标题下的 void 函数上使用属性@interface?
@property (nonatomic) void testjj;
- 在 m 文件中:
-(void)testjj{
NSLog(@"testjtestj");
}
Cannot synthesize property 'testjj' with incomplete type 'void'
为什么我不能在标题下的 void 函数上使用属性@interface?
@property (nonatomic) void testjj;
- 在 m 文件中:
-(void)testjj{
NSLog(@"testjtestj");
}
Cannot synthesize property 'testjj' with incomplete type 'void'
在.h
- (void)testjj;
米
self.testjj;
那没问题。
注释处理将 void变量声明为 ivar。评论还详细说明了 void 和 void 指针之间的区别。这个很重要。
似乎您想要一个 ivar,实际上是一个 void函数。这当然是可能的,如果您使用 void 指针而不是 void,如下所示。
// A few functions for later
void f1( int a, int b )
{
NSLog(@"f1");
}
void f2( int a, int b )
{
NSLog(@"f2");
}
void F1( void )
{
NSLog(@"F1");
}
void F2( void )
{
NSLog(@"F2");
}
// Typedef makes life easy
typedef void ( func )( int a, int b );
typedef void ( Func )( void );
// Some class
@interface MyClass : NSObject
// Defining ivars ...
// Typedef is easier
@property (nonatomic) func * ma;
@property (nonatomic) Func * mb;
// Direct is also possible
@property (nonatomic) void ( * na )( int, int );
@property (nonatomic) void ( * nb )( void );
@end
@implementation MyClass
// Assigning the ivars
- ( void ) setIt
{
self.ma = f1;
self.mb = F1;
self.na = f2;
self.nb = F2;
}
// 'Using' the ivars
- ( void ) doIt
{
self.ma ( 1, 2 );
self.mb ();
self.na ( 1, 2 );
self.nb ();
}
// Have some fun
- ( void ) swapIt
{
func * t1 = self.ma;
Func * t2 = self.mb;
self.ma = self.na;
self.mb = self.nb;
self.na = t1;
self.nb = t2;
}
@end