Objective-C如何返回struct数据类型?

时间:2013-03-14 09:59:15

标签: objective-c

struct Line {

    NSUInteger x1;
    NSUInteger x2;
};

// ...

- (Line)visibleLine;

上面的代码显然不起作用,因为Line不是有效类型。有什么建议吗?

4 个答案:

答案 0 :(得分:8)

Objective-C是基于C而不是C ++的。在C我们需要使用struct Line,而在C ++中Line则可以。

您可以这样做:

struct {
    NSUInteger x1;
    NSUInteger x2;
} Line;

// ...

- (struct Line)visibleLine{

}

此外,

typedef struct {
    NSUInteger x1;
    NSUInteger x2;
} Line;

// ...

- (Line)visibleLine;

答案 1 :(得分:4)

typedef struct {
    NSUInteger x1;
    NSUInteger x2;
} Line;

// ...

- (Line)visibleLine;

我最初(在其他答案之前)提出上述原因有明确原因:这就是Apple在自己的代码中如何做到的。这不是唯一的方法,但它是Apple的标准方式。它永远不会将struct放在API的任何地方的原型中。

答案 2 :(得分:2)

C 中,struct LineLine不同。您需要使用别名struct Line来仅使用Line来引用它。所以,

struct Line { /* ... */ };        // Make a struct.

typedef struct Line       Line;   // Make an alias.

这也可以立刻写出来。

typedef struct Line { /* ... */ }        Line;

C ++ 会自动生成别名,但您应该将 C ++ C 完全不同。不要混淆他们的名字。

答案 3 :(得分:0)

您错过了关键字 struct

- (struct Line)visibleLine;