Swift使用c结构
发布时间:2020-12-14 05:32:11 所属栏目:百科 来源:网络整理
导读:对不起标题,我找不到用几句话来形容我的问题. 我已经知道swift可以使用c编写的struct.例如 在Bridging-Header.h中 typedef struct { int x; int y;} Pointer; 然后我可以直接使用Pointer. 但就我而言,我有一个用C语言编写的库.有许多带有隐藏工具的结构.例如
对不起标题,我找不到用几句话来形容我的问题.
我已经知道swift可以使用c编写的struct.例如 在Bridging-Header.h中 typedef struct { int x; int y; } Pointer; 然后我可以直接使用Pointer. 但就我而言,我有一个用C语言编写的库.有许多带有隐藏工具的结构.例如: typedef struct Pointer Pointer; 我不能再使用Pointer了,得到了未知类型.在我的库中,Pointer用作 create_pointer(Pointer **pointer); 任何帮助表示赞赏! P.S我没有定义struct Pointer的.h文件.关于Pointer的所有细节都是隐藏,例如通过函数访问它们 int getx(Pointer *pointer); 这是我的完整测试代码: #include <stdio.h> #include "user_input.h" struct Pointer { int x; int y; }; void get_user_input(int *user_input) { scanf("%i",user_input); } void init_pointer(Pointer *point) { point->x = 20; point->y = 20; } user_input.h #ifndef __user_input_h__ #define __user_input_h__ typedef struct Pointer Pointer; void init_pointer(Pointer *p); #endif 转职Header.h #include "user_input.h" main.swift import Foundation var pointer:Pointer = Pointer(x:10,y:20) Xcode给我这个错误:指针未定义
转职Header.h
#include "user_input.h" user_input.c #include <stdlib.h> struct Pointer { int x; int y; }; Pointer *create_pointer() { Pointer *p = malloc(sizeof(struct Pointer)); if (p) { p->x = 20; p->y = 20; } return p; } void delete_pointer(Pointer *p) { free(p); } int pointer_x(Pointer *p) { return p->x; } int pointer_y(Pointer *p) { return p->y; } user_input.h #ifndef __user_input_h__ #define __user_input_h__ typedef struct Pointer Pointer; Pointer *create_pointer(); void delete_pointer(Pointer *p); int pointer_x(Pointer *p); int pointer_y(Pointer *p); #endif main.swift import Foundation var pointer: COpaquePointer = create_pointer() println("(pointer_x(pointer)),(pointer_y(pointer))") delete_pointer(pointer) // Writing the wrapper class could be helpful. class CPointer { var _ptr: COpaquePointer init() { _ptr = create_pointer() assert(_ptr,"Failed on create_pointer()") } deinit { delete_pointer(_ptr) } var x: Int { get { return Int(pointer_x(_ptr)) } } var y: Int { get { return Int(pointer_y(_ptr)) } } } var p = CPointer() println("(p.x),(p.y)") (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |