2015-03-31 3 views
0

У меня проблема, когда в Swift у меня есть класс, определенный с именем Person, а при разговоре с некоторым кодом объектного-c он попытается создать новые экземпляры этот класс.Использование класса NSClassFromString() в объявленном классе Swift требует полного имени

Очевидно NSClassFromString (@ «Человек») терпит неудачу, потому что оно должно быть полным именем, такие как DBAccess_Test.Person.

Мой вопрос: могу ли я запрограммировать генератор DBAccess_Test., возможно, через реестр классов, возможно?

Причина, заключающаяся в том, что для ORM, который мы поддерживаем, программист Swift может решить, что все его классы хранения в отдельном пространстве имен будут применены к приложению. Но мы хотим поддерживать стандартные методы именования таблиц, которые соответствуют именам класса, понятным разработчику.

Например, вместо запроса существа:

он стал бы:

NSArray* r = [[[[Person query] 
      where:@"surname IN (SELECT surname FROM DBAccess_Test_Employees)"] 
      orderBy:@"forename"] 
      fetch]; 

ORM так уже имеет немного кризис идентичности. Мы просто хотим следить за именами таблиц с именами классов, которые будет использовать программист.

Заранее благодарим вашу помощь.

ответ

0

Раздражающе, я наткнулся на ответ, как только я опубликую это (несмотря на поиск часов).

Вы должны положить @objc(SwiftClassName) над вашим классом быстрого действия.
Как:

@objc(SubClass) 
class SubClass: SuperClass {...} 

Тогда все ваши оригинальные Objective-C код будет видеть эти классы, а не пытаться сделать что-нибудь в стиле фанк с ними!

Благодаря @klaus

Оригинальный пост можно найти здесь:

https://stackoverflow.com/a/24448786/846035

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