2015-12-09 4 views
3

С Lib API: mycapi.hКак я справляюсь с указателем, когда Swift называет C API

typedef struct{ 
    int itype; 
    double * dx; 
    double * dy; 
}MyObjInfo; 

typedef MyObjInfo * MyObjHandle; 

MyObjHandle MyObjInit(const char *pFile); 

добавить myapi.h как модуль

мой скор код:

import Foundation 
import mycapiModule 


var h:MyObjHandle = MyObjInit("/home/a") 
var o:MyObjInfo = h.memory 
////to do somethings 
//... 
h.destroy() 
h = nil 
print("\(o.itype)") 

Итак, мои вопросы:

  1. Почему я все еще могу использовать o после h.destroy()?
  2. Нужно ли мне уничтожать h и o?
+0

Я думаю, вам нужно использовать UnsafeMutablePointer : Вы можете прочитать о работе с C здесь: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html –

ответ

0

У вас нет доступа.

Для доступа к библиотеке C/Cpp, в языке Swift с использованием XCode используйте ниже.

добавить файл main.mm с

#import <UIKit/UIKit.h> 
#import "ProjectName-swift.h" 
//#import "AppDelegate.h" 

int main(int argc, char * argv[]) { 

@autoreleasepool { 
     return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
    } 
} 

Комментарий - @UIApplicationMain в AppDelegate

Теперь с помощью моста вы можете получить доступ к C/CPP библиотеку или непосредственно из Swift языка программирования.