Попытка использовать структуру от ObjC до Swift не кажется такой простой. Я получаю небезопасный указатель, который я не знаю, могу ли я надежно наложить.Передача структуры от ObjC до Swift
Вот код:
//
// In OBJC land
//
// Type declared as a struct
typedef struct node {
int children_count;
} node_t;
// Super class has a property
@property (nonatomic, assign, readonly) node_t *node;
//
// In SWIFT land
//
// Derived class tries to set the property inside the C struct
let n: UnsafeMutablePointer<node_t> = super.node // As swift compiler sees it
n.children_count = 0 // ERR!!!
ли мне действительно нужно применять unsafeBitcast здесь или есть более простой/безопаснее и более удобный способ, чтобы преобразовать то, что, как представляется, часто сценарий?
UPDATE:
Я попытался с помощью памяти для доступа к элементам структуры и я получаю EXC_BAD_INSTRUCTION
var node: node_t = self.node.memory
node.children_count = 42
UPDATE прод & ФИНАЛ
Я заработал. Благодаря терпению @ matt, чтобы убедиться, что я полностью проник в «память». Другой трюк, чтобы понять назначение в одном непрерывном заявлении вроде этого:
var node: UnsafeMutablePointer<node_t> = self.node
node.memory.children_count = 42
Если я делаю следующее изменение не получает совершено передается вызов функции:
var node: node_t = self.node.memory
node.children_count = 42
«Если я делаю следующее изменение не получает совершено передается вызов функции» Ах, очень хороший момент; да, потому что в Swift присвоение структуры 'node' вызывает копирование структуры. – matt
Готово. Медленное воскресенье. Спасибо @matt – Laurent
Спасибо, что присоединились к нему - я действительно был готов отправить вам демонстрационный проект, если вам это нужно! :) – matt