gpt4 book ai didi

c - Swift 使用 c 结构

转载 作者:IT王子 更新时间:2023-10-29 05:30:37 25 4
gpt4 key购买 nike

对不起标题,我无法用几句话来描述我的问题。

我已经知道swift可以用c写的struct了。例如

在 Bridging-Header.h 中

typedef struct {
int x;
int y;
} Pointer;

那我就可以直接用Pointer了。

但就我而言,我有一个用 C 语言编写的库。其中有许多带有隐藏实现的结构。例如:
在 Briding-Header.h 中

typedef struct Pointer Pointer;

我不能再使用 Pointer,类型未知。在我的库中,指针用作

create_pointer(Pointer **pointer);

感谢任何帮助!

P.S 我没有定义 struct Pointer 的 .h 文件。关于指针的所有细节都是隐藏的,例如通过函数访问它们

int getx(Pointer *pointer);

这是我的完整测试代码:
用户输入.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;
}

用户输入.h

#ifndef __user_input_h__
#define __user_input_h__

typedef struct Pointer Pointer;

void init_pointer(Pointer *p);

#endif

桥接头.h

#include "user_input.h"

主.swift

import Foundation
var pointer:Pointer = Pointer(x:10, y:20)

Xcode 给我这个错误:指针未定义

最佳答案

Bridging-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

ma​​in.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)")

关于c - Swift 使用 c 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24050942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com