6164


Swift から Objective-C の構造体のメンバにアクセスする方法は、どうすれば良いでしょうか？

【Objective-C】

[code]

    struct test {
        char        *test_name;
    };
    
    extern int getifaddrs(struct test **);
    
[/code]

【Swift】

[code]

    var work : UnsafeMutablePointer<test>;
    
    var ret:int_fast32_t = 0
    ret=getifaddrs(&work)
    
[/code]

ここで、`work` の中の `test_name` メンバにアクセスしたいのですが出てきませんでした。

[code]

    work.
    
[/code]


CC BY-SA 3.0
2015-02-07T04:44:58.363
6081
2015-02-09T00:46:38.103
2015-02-07T06:49:12.827
4978
8109
question
objective-c swift
Swift から Objective-C の構造体のメンバにアクセスする方法


UnsafePointer、UnsafeMutablePointerは、プロパティ「memory」を使って、ポイントする値を取得できます。

以下、サンプルコード。

Objective-Cファイル：

[code]

    #import <Foundation/Foundation.h>
    // 構造体の定義
    typedef struct test {
        int number;
    } Test;
    // 構造体のポインタを返す関数。基本Swiftは、ポインタが「ない」ことになってるので、C側でポインタを作る必要があります。
    Test *getPointer(Test *value) {
        return value;
    }
    // ポインタのポインタを引数にとる関数
    int inputTwo(Test **theTest) {
        (*theTest)->number = 2;
        return 2;
    }
    
[/code]

Swiftファイル：ViewController.swift

[code]

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // 構造体Test型の変数myTestを宣言して、初期化。それからTest型ポインタmyPointerを作成。
            var myTest = Test(number: 0)
            var myPointer :UnsafeMutablePointer<Test> = getPointer(&myTest)
            // ポインタのポインタを引数にとる関数に渡す。
            let result = inputTwo(&myPointer)
            // プロパティ「memory」で、ポインタが指し示している構造体を取得。
            let resultTest = myPointer.memory
            println(result)
            // Swiftの構造体と同じ扱いで、構造体の要素にアクセスできます。
            println(resultTest.number)
        }
    }
    
[/code]


CC BY-SA 3.0
2015-02-08T23:48:53.220
6164
2015-02-09T00:46:38.103
2015-02-09T00:46:38.103
7362
7362
6081
answer