2014-09-01 2 views
0

Я определил два класса Swift в моем проекте Xcode. Все остальное - Objective-C.«ProductModuleName-Swift.h» не экспортирует все классы Swift

Чтобы использовать классы в Objective-C, я пытаюсь импортировать ProductModuleName-Swift.h, но файл содержит только определение для одного из классов Swift. (SearchViewController)

Этот класс экспортируется:

class SearchViewController : UIViewController { 

, но это не так:

public class Socket { 

ответ

4

Из "Migrating Your Objective-C Code to Swift" в "Использование Swift с какао и Objective-C" документация:

  • Должно быть доступный и пригодный для использования в Objective-C, класс Swift должен быть потомком класса Objective-C или должен быть помечен как @objc.

  • Когда вы вводите код Swift в Objective-C, помните, что Objective-C не сможет перевести некоторые функции, которые являются специфичными для Swift. Список см. В разделе "Using Swift from Objective-C".

SearchViewController является потомком класса Objective-C, но не Socket. Чтобы сделать его пригодным для использования в Objective-C, объявить его как подкласс NSObject:

public class Socket : NSObject { ... 

или объявить его как

@objc public class Socket { ... 
+0

спасибо. Я, должно быть, не обратил на это внимания. – idmean

+0

Я должен добавить, что объявление как подкласс NSObject лучше. Если вы этого не сделаете, вы не можете выполнить '[[Socket alloc] init]' – idmean

+0

@wumm: Хорошая точка, 'alloc' - это метод класса NSObject. - (Объявление '@ objc' будет работать с инициализаторами класса/фабрики, определенными в классе Swift.) –

Смежные вопросы