自动将C结构函数桥接到Swift方法

GScrivs

是否有一种命名约定可以使Swift自动将对结构起作用的C函数与该结构本身相关联?

例如,CGRect声明如下:

struct CGRect {
    CGPoint origin;
    CGSize size;
};
typedef struct CG_BOXABLE CGRect CGRect;

...

CG_EXTERN CGFloat CGRectGetMinX(CGRect rect)
    CG_AVAILABLE_STARTING(10.0, 2.0);

但是我可以这样编写Swift代码:

let rect = CGRect()
let minX = rect.minX

我试图复制相同的内容,希望可以从我自己的C结构中获得相同的行为,但似乎无法使其正常工作。

这是由于结构的声明方式导致的自动行为,还是通过扩展/其他魔术将其添加到其他位置?如果通过扩展,如何CGRectGetMinX在Swift中禁止原始功能?

马丁·R

Swift 3引入了将全局函数作为成员函数导入的功能,请参阅SE-0044作为成员导入

这是一个简单的示例,如何将其用于自己的结构类型:

typedef struct MyRect {
    int x;
    int y;
    int w;
    int h;
} MyRect;

// Import as computed property:
int MyRectGetMinX(MyRect rect)
__attribute__((swift_name("getter:MyRect.minX(self:)")));

// Import as method:
int MyRectArea(MyRect rect)
__attribute__((swift_name("MyRect.area(self:)")));

现在您可以从Swift调用它为

let rect = MyRect()
let mx = rect.minX
let ar = rect.area()

并且使用全局函数无法编译:

let mx = MyRectGetMinX(rect)
// Error: 'MyRectGetMinX' has been replaced by property 'MyRect.minX'

let ar = MyRectArea(rect)
// Error: 'MyRectArea' has been replaced by instance method 'MyRect.area()'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++将结构函数作为继承结构中函数的参数传递

C 结构函数语法 - 传递元素,返回结构

将Swift桥接到React-Native时,“不是公认的Objective-C方法”

如何将Objective-C initWithError:方法桥接到Swift

如何将Swift String桥接到Objective C NSString?

将Swift初始化程序桥接到目标C

将Swift 4枚举桥接到目标C

结构函数指针错误

转到结构函数和*

Swift无法将NSNumber桥接到Float

为什么可以将结构函数分配给其他结构的成员?

如何将结构数组传递给我的结构函数

如何使这些结构函数通用?

如果元素超过 2 个,则结构函数将无法按预期工作

将一系列枚举从Swift桥接到Objective-C

当Objc-C桥接到Swift以及反之时如何查看方法签名?

无法将NSNumber桥接到Float Swift 3.3

如何将Swift Promise桥接到React Native

如何将React Native Promise桥接到Swift

是否使用指针定义golang结构函数

向量中自定义结构函数的内存使用

在Rust中为特定类型实现结构函数

结构函数返回不完整的类型

如果存在带有不同参数的继承成员,为什么对C ++结构函数的调用不明确?

C ++模板自身名称作为相同模板结构函数内部的模板模板参数传递

将通道桥接到序列

在Ubuntu Linux上,数值类型不会自动桥接到纯Swift中的NSNumber吗?

如何从Go / Golang中的另一个方法表达式中访问方法表达式(结构函数)?

收听以调用Golang中另一个结构使用的结构函数