как преобразовать пользовательскую структуру Objc в NSValue в Swift?

Я определяю пользовательскую структуру в Objc

typedef struct {

    int a; 

    int b; 

} MyStruct;

В Objc я могу преобразовать структуру в использование NSValue

MyStruct struct = {0};
NSValue *value = [NSValue value:&struct withObjCType:@encode(MyStruct)];

Но как я могу сделать это в Swift?


person desmond_yy    schedule 28.11.2019    source источник
comment
Возможный дубликат Convert/Wrap Swift struct as NSValue для целей CAAnimation?   -  person OykuNehir    schedule 29.11.2019


Ответы (1)


Где-то в вашем коде Objective-C добавьте функцию, например

const char * __nonnull getMyStructOCT() {
    return @encode(MyStruct);
}

и сделать его доступным для кода Swift через соединительный заголовок. Затем в вашем коде Swift вы можете сделать, например, следующее:

let myStructOCT = getMyStructOCT()  // can then reuse myStructOCT over and over
var s = MyStruct(a: 111, b: 222)
let v = NSValue(bytes: &s, objCType: myStructOCT)

Если вы хотите получить значение:

var s1 = MyStruct()
v.getValue(&s1)  // s1 now has your value
person Anatoli P    schedule 05.12.2019