Swift使用c结构

前端之家收集整理的这篇文章主要介绍了Swift使用c结构前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对不起标题,我找不到用几句话来形容我的问题.

我已经知道swift可以使用c编写的struct.例如

在Bridging-Header.h中

  1. typedef struct {
  2. int x;
  3. int y;
  4. } Pointer;

然后我可以直接使用Pointer.

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

  1. typedef struct Pointer Pointer;

我不能再使用Pointer了,得到了未知类型.在我的库中,Pointer用作

  1. create_pointer(Pointer **pointer);

任何帮助表示赞赏!

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

  1. int getx(Pointer *pointer);

这是我的完整测试代码
user_input.c

  1. #include <stdio.h>
  2.  
  3. #include "user_input.h"
  4.  
  5. struct Pointer {
  6. int x;
  7. int y;
  8. };
  9.  
  10. void get_user_input(int *user_input) {
  11. scanf("%i",user_input);
  12. }
  13.  
  14. void init_pointer(Pointer *point) {
  15. point->x = 20;
  16. point->y = 20;
  17. }

user_input.h

  1. #ifndef __user_input_h__
  2. #define __user_input_h__
  3.  
  4. typedef struct Pointer Pointer;
  5.  
  6. void init_pointer(Pointer *p);
  7.  
  8. #endif

转职Header.h

  1. #include "user_input.h"

main.swift

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

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

转职Header.h
  1. #include "user_input.h"

user_input.c

  1. #include <stdlib.h>
  2.  
  3. struct Pointer {
  4. int x;
  5. int y;
  6. };
  7.  
  8. Pointer *create_pointer() {
  9. Pointer *p = malloc(sizeof(struct Pointer));
  10. if (p) {
  11. p->x = 20;
  12. p->y = 20;
  13. }
  14. return p;
  15. }
  16.  
  17. void delete_pointer(Pointer *p) {
  18. free(p);
  19. }
  20.  
  21. int pointer_x(Pointer *p) {
  22. return p->x;
  23. }
  24.  
  25. int pointer_y(Pointer *p) {
  26. return p->y;
  27. }

user_input.h

  1. #ifndef __user_input_h__
  2. #define __user_input_h__
  3.  
  4. typedef struct Pointer Pointer;
  5. Pointer *create_pointer();
  6. void delete_pointer(Pointer *p);
  7. int pointer_x(Pointer *p);
  8. int pointer_y(Pointer *p);
  9.  
  10. #endif

main.swift

  1. import Foundation
  2.  
  3. var pointer: COpaquePointer = create_pointer()
  4. println("\(pointer_x(pointer)),\(pointer_y(pointer))")
  5. delete_pointer(pointer)
  6.  
  7. // Writing the wrapper class could be helpful.
  8.  
  9. class CPointer {
  10. var _ptr: COpaquePointer
  11.  
  12. init() {
  13. _ptr = create_pointer()
  14. assert(_ptr,"Failed on create_pointer()")
  15. }
  16.  
  17. deinit {
  18. delete_pointer(_ptr)
  19. }
  20.  
  21. var x: Int {
  22. get { return Int(pointer_x(_ptr)) }
  23. }
  24.  
  25. var y: Int {
  26. get { return Int(pointer_y(_ptr)) }
  27. }
  28. }
  29.  
  30. var p = CPointer()
  31. println("\(p.x),\(p.y)")

猜你在找的Swift相关文章