目标C - 自定义结构'制作'方法类似于CLLocationCoordinate2DMake

时间:2017-06-23 08:40:31

标签: ios objective-c struct

我在单独的头文件中编写了自定义结构。它看起来像这样

typedef struct RequestSpecifics {
    BOOL includeMetaData;
    BOOL includeVerboseData;
} RequestSpecifics;

现在我想制作一个定制的' make'方法,类似于CoreLocation结构CLLocationCoordinate2 CLLocationCoordinate2DMake方法。

我尝试了两种不同的方式。虽然两种方式都没有在.h文件中出现错误,但是当我想使用make方法时,我确实会出错。

方法1:

extern RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData);

抛出:

  

Apple Mach-O Linker

     

" _RequestSpecificsMake",引自:

     

错误链接器命令失败,退出代码为1(使用-v查看调用)

方法2:

extern RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData) {
    RequestSpecifics specifics;
    specifics.includeMetaData = includeMetaData;
    specifics.includeVerboseData = includeVerboseData;
    return specifics;
}

抛出:

  

Apple Mach-O Linker

     

错误链接器命令失败,退出代码为1(使用-v查看调用)

用法示例:

RequestSpecificsMake(NO, NO)

我已检查所有common solutions的Apple Macho-Linker错误,但似乎没有任何效果或解决方案不相关。

那么我该如何正确实施' make'结构的方法?

2 个答案:

答案 0 :(得分:2)

所以显然方法2应该是实现,它不应该在.h文件中。当然,我也需要一个.m文件。这应该是正确的方法:

.h文件

RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData);

.m文件

RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData) {
        RequestSpecifics specifics;
        specifics.includeMetaData = includeMetaData;
        specifics.includeVerboseData = includeVerboseData;
        return specifics;
    }

最后我必须结合两种方法!此外,根据它的外观,不需要extern关键字。

答案 1 :(得分:1)

为什么不试试

static inline代替extern

static inline RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData) {
    RequestSpecifics specifics;
    specifics.includeMetaData = includeMetaData;
    specifics.includeVerboseData = includeVerboseData;
    return specifics;
}

或者如果您想使用extern,则需要在.m文件中编写。