Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

C言語の構造体をswiftで扱う

分かったこと。
1. swiftC言語の構造体を別変数へ代入すると全ての要素が代入される。つまりC言語と同じ動作をする。
2. C言語の構造体内のポインタにはC言語側で入れたアドレス値が入っていてswift側でそのまま、UnsafeMutablePointerとして扱える。
3. C言語の構造体内の固定長配列はswiftではタプルとして扱われる。

import Foundation

var some:Some = ddd().something()
var some1:Some = some;

print("\(some1.one)")
print("\(some1.two)")
var p:UnsafeMutablePointer<Int32> = some1.two
print("\(some1.three.0)")
print("\(some1.three.1)")
//p[0x1002ca530]
//1
//0x00000001002ca530
//48
//49
#import <Foundation/Foundation.h>
#include <stdint.h>

typedef struct {
    int32_t one;
    int32_t *two;
    char three[2];
} Some;

@interface ddd : NSObject
- (Some)something;
@end

static int two = 2;

@implementation ddd
- (Some)something
{
    Some some;
    some.one = 1;
    some.two = &two;
    printf("p[%p]\n", &two);
    some.three[0] = '0';
    some.three[1] = '1';
    return some;
}
@end