对不起标题,我找不到用几句话来形容我的问题.
我已经知道swift可以使用c编写的struct.例如
在Bridging-Header.h中
- typedef struct {
- int x;
- int y;
- } Pointer;
然后我可以直接使用Pointer.
但就我而言,我有一个用C语言编写的库.有许多带有隐藏工具的结构.例如:
在Briding-Header.h中
- typedef struct Pointer Pointer;
我不能再使用Pointer了,得到了未知类型.在我的库中,Pointer用作
- create_pointer(Pointer **pointer);
任何帮助表示赞赏!
P.S我没有定义struct Pointer的.h文件.关于Pointer的所有细节都是隐藏,例如通过函数访问它们
- int getx(Pointer *pointer);
这是我的完整测试代码:
user_input.c
- #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)")