桥接头方法参数问题

Posted

技术标签:

【中文标题】桥接头方法参数问题【英文标题】:Bridging Header Method Parameter Issue 【发布时间】:2018-11-11 02:41:38 【问题描述】:

我正在尝试学习如何在这个测试项目中使用桥接头。对于这一部分,我想要一个方法,它接收并返回一个 CGPoint 数组。

    #import <Foundation/Foundation.h>
    #import <UIKit/UIKit.h>
    #import <CoreGraphics/CoreGraphics.h>

    @interface OpenCVWrapper : NSObject

    + (UIImage *)grayscaleImage:(UIImage *)image;
    + (UIImage *)gaussianBlurImage:(UIImage *)image;
    + (UIImage *)cannyEdgeImage:(UIImage *)image;

    //Error says Expected a type
    + ([CGPoint *])lineEdges:([CGPoint *])points;

    @end

因为我是新手,所以我什至不知道从哪里开始寻找问题。

【问题讨论】:

桥接头不是您手动编写的。您的OpenCVWrapper 是如何定义的? Swift 类还是 Objective-C 类? 对不起,我不确定我是否理解你的问题(我还是新手)。我认为 OpenCVWrapper 是一个 Objective-C 接口。我正在使用 OpenCV 框架,我相信它是用 c++ 编写的。 你结合Objective-C实现编写Objective-C接口。需要接口来编写实现,而不是桥接头。或者当你编写一个 Swift 类时,Xcode 会生成一个桥接头。您是否在问题文本中写过 OpenCVWrapper 是一个 Objective-C 类? 是的,我明白你的意思。 OpenCVWrapper 是一个 Objective-C 类 【参考方案1】:

由于你需要返回一个CGPoint的数组,你的数组应该保存一个NSValue类型,因为数组不能保存struct类型

+ (NSArray<NSValue *> *)lineEdges:(NSArray<NSValue *> *)points;

你应该把你的方法称为

NSArray *lineEdges = [OpenCVWrapper lineEdges:@[[NSValue valueWithCGPoint:CGPointMake(3.3, 4.4)]]];

返回值也应该在 NSValue 中并提取

NSValue *val = [lineEdges objectAtIndex:0];
CGPoint p = [val CGPointValue];

【讨论】:

谢谢,这很好用。此外,我在一些示例代码中经常看到星号符号。我读过它是一个指针,它的值实际上是对一个位置的引用。这是正确的吗? 是的,没错。有关指针的更多详细信息,您可以通过此***.com/questions/897366/…。另外请将答案标记为已接受,以便帮助其他人确定正确的工作解决方案

以上是关于桥接头方法参数问题的主要内容,如果未能解决你的问题,请参考以下文章

框架方法可访问性中的桥接头

Objective-C++ 和 Swift - 桥接头中的嵌套结构

无法导入桥接头

无法导入桥接头

如何在使用桥接头时将数据(字典)从 Objective-C 控制器传递到 Swift `viewcontroller` 中?还有其他方法吗?

桥接头文件找不到导入的 Objective-C 项目