加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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语言编写的库.有许多带有隐藏工具的结构.例如:
在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)")

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读