-1

首先,我对Objective c不太满意,我正在尝试将C++类转换为Objective C,但在我的类上实现时遇到了麻烦,这就是我为c++得到的

UniqueWord::UniqueWord(const string word, const int line)
{
wordCatalog=word;
count = 0;
addLine(line);
}

//Deconstructor.
UniqueWord::~UniqueWord(void)
{
} 

这就是我为Objective C得到的

@implementation UniqueWord

-(id)initWithString:(NSString*)str andline:(NSInteger)line{
    _wordCatalog=str;
    count=0;
    addline(line);
    return ?//return what? it states (Control reaches end of non-void function)
}

我对目标 c 中的课程真的很陌生,所以我还要求一个愚蠢的答案,“id”到底是什么,你如何使用它?

4

4 回答 4

2

Objective C 的构造函数有点不同。您应该创建如下内容:

-(instancetype)initWithString:(NSString*)str andline:(NSInteger)line{
    self = [super init];
    if(self == nil) return nil;
    _wordCatalog=str;
    count=0;
    addline(line);
    return self;
}
于 2013-11-12T19:21:47.610 回答
2

id是 Objective-C 中的一个泛型类。这有点类似于void*C++,但执行环境提供了更多支持,因此不需要太多类型转换。

C++ 中没有并行的概念:无类型的对象引用允许您动态地使用对象,在运行时而不是在编译时检查调用的细节。

另请注意,Objective-C 使用初始化器而不是构造器。两者的用途相似,但并不相同:构造函数可以与运算符一起运行,也可以new单独运行,而初始化程序只能与进行分配的方法一起运行。此外,初始化器可以返回一个不同的对象来代替 ; 提供的对象alloc。构造函数不能这样做。

于 2013-11-12T19:22:06.400 回答
1

Anid是 Objective-C 中任何对象的一个​​点。init 方法返回一个已分配和实例化的对象。我会在https://developer.apple.com/library/ios/documentation/general/conceptual/CocoaEncyclopedia/Initialization/Initialization.html向您推荐有关初始化程序的 Apple 文档

在使用上面的文章所说的内容时,你会想要写类似的东西。

- (instancetype)initWithString:(NSString *)str andLine:(NSInteger)line {
    self = [super init];
    if (self) {
        _wordCatalog = str;
    }
    return self;
于 2013-11-12T19:22:52.227 回答
0

init 方法的典型形式(您应该使用)如下所示:

- (id)init
{
    if ( (self = [super init] ) )
    {
        [other code you want in the constructor]
    }

    return self;
}

因此,对于您拥有的方法,它应该如下所示:

-(id)initWithString:(NSString*)str andline:(NSInteger)line{

    if ( (self = [super init]) )
    {
        _wordCatalog=str;
        count=0;
        addline(line);
    }

    return self;
}

也就是说,除非超类有一个 initWithString:andline: 构造函数,在这种情况下你会使用

if ( (self = [super initWithString:string andline:line) )

作为 if 语句。

于 2013-11-12T19:24:54.127 回答