Структура в стиле C в Objc не импортируется в Swift

#c #objective-c #swift #struct #bridging-header

#c #objective-c #swift #структура #мостовой заголовок

Вопрос:

Проблема, с которой я сталкиваюсь и абсолютно не понимаю, заключается в том, почему мой Swift-код не может получить доступ к импорту структуры в стиле C с мостом из objective-c, когда NSString содержится указатель, тогда как структура видна, когда NSString заменяется на a char * .

Например, когда в моем Foo.h файле определено следующее:

 typedef struct {
    NSString* value;
    SomeEnum unit;
} SomeMeasurement;
 

Я получаю ошибку Value of Type ... has no member Measurement (от родительского class ) во время компиляции.

Тогда как, когда моя структура выглядит следующим образом:

 typedef struct {
    char* value;
    SomeEnum unit;
} SomeMeasurement;
 

Все компилируется, как и ожидалось (даже если char оно непригодно для моих текущих нужд).
Тот факт, что это небольшое изменение позволяет Swift «видеть» эту структуру, меня полностью озадачивает, поскольку это означает, что это (вероятно) не проблема с файлом в заголовке bridging или что-то в этом роде.

Кроме того, если я заменю NSString на NSMutableData , проблема не исчезнет, и структура не будет видна.

Комментарии:

1. а ты import Foundation ?

2. Хороший момент, но да. Foundation импортируется, когда я определяю эту структуру в Foo.h и в моем пункте назначения Bar.swift

3. вы знаете, что вы конфликтуете @available(OSX 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) public struct Measurement<UnitType>

4. @OlSen хорошо заметил, но все эти имена являются запутанными версиями моего кода. Я обновил свой вопрос, чтобы лучше отразить это.

5. Мой вопрос: «Почему один typedef виден из swift, а другой нет».