0

为什么我不能在标题下的 void 函数上使用属性@interface

@property (nonatomic) void testjj;

- 在 m 文件中:

-(void)testjj{
  
  NSLog(@"testjtestj");
  
}
Cannot synthesize property 'testjj' with incomplete type 'void'
4

2 回答 2

0

在.h

- (void)testjj;

self.testjj;

那没问题。

于 2020-10-29T03:28:41.153 回答
0

注释处理将 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
于 2020-10-29T02:29:34.053 回答