【问题标题】: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 类

标签: objective-c swift bridging-header


【解决方案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];

【讨论】:

  • 谢谢,这很好用。此外,我在一些示例代码中经常看到星号符号。我读过它是一个指针,它的值实际上是对一个位置的引用。这是正确的吗?
  • 是的,没错。有关指针的更多详细信息,您可以通过此stackoverflow.com/questions/897366/…。另外请将答案标记为已接受,以便帮助其他人确定正确的工作解决方案
猜你喜欢
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多