桥接头方法参数问题
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` 中?还有其他方法吗?