首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >目标C类方法错误‘未声明标识符的使用’

目标C类方法错误‘未声明标识符的使用’
EN

Stack Overflow用户
提问于 2020-12-13 23:06:58
回答 2查看 1.1K关注 0票数 1

希望不是一个可笑的问题,因为我是一个自学的程序员,但我找到了一些代码,看起来它可能会帮助我做一些我想做的事情。基本上,我希望在我的应用程序中增强NSLog()函数,并希望以与NSLog()相同的方式调用我的方法。google 'void ()‘非常困难,因为没有什么是相关的,我习惯于这样构造的方法:

代码语言:javascript
复制
-(void)RLog(NSString*)statement;

但样本建议使用:

代码语言:javascript
复制
void RLog(NSString *statement,...);

这似乎有效,让我用‘RLog(@“我的消息”)来调用它,但是使用它时,这个方法忽略了类变量,而且我似乎也不能使用'self’.

Logging.h

代码语言:javascript
复制
#import <UIKit/UIKit.h>
@import Foundation.NSString;

@interface Logging : NSObject

@property (nonatomic) BOOL enabled;

void RLog(NSString *statement,...);

@end

Logging.m

代码语言:javascript
复制
#import "Logging.h"

@implementation Logging

@synthesize enabled;

void RLog(NSString *format,...) {

     /* something that uses 'enabled' throws 'Use of undeclared identifier enabled' */

     /* something else that uses '[[self class] session]' throws 'Use of undeclared identifier self' */

}

@end

希望我已经包括了足够的信息来解释我的问题,而不是删除太多,使它难以理解!

提前谢谢。

等离子体

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-14 16:09:41

经过进一步的调查,我找到了一种利用信息here绕过这一问题的方法。

我添加了一个名为thisClass的类变量,然后在我的类init阶段为它分配了“self”。

代码语言:javascript
复制
@implementation Logging
    
id  thisClass;

- (id) init
{
    if (self = [super init])
    {
        thisClass = self;
    }
    return self;
}

从C函数内部,我现在可以使用以下方法调用日志类中的方法:

代码语言:javascript
复制
[thisClass log:@"Testing"];

在不需要将"self“作为参数的情况下,我将需要局部变量的其余代码移到我的'log‘方法中,并简单地使用C方法以简化的方式调用它。

等离子体

票数 1
EN

Stack Overflow用户

发布于 2020-12-13 23:42:31

代码语言:javascript
复制
void RLog(NSString *format,...)

..。不是一个目标C方法,它只是一个C函数。

C函数是全局的,是独立的.这里没有self,也没有与日志记录的enabled连接。就这个函数而言,日志类可能根本不存在。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65281639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档