Функция вызова Swift в Objective-C

Функция Swift, определенная в MySwift.swift файле:

func SomeSwift()
{

}

SomeSwift() не определен ни в одном классе Swift, это просто чистая функция.

После CMD + B для сборки проекта откройте Project-Swift.h, SomeSwift() там не отображается.

Должна ли функция в Swift быть определена в каком-то классе Swift? а с пометкой @objc?

как следующее:

@objc class SomeSwift: NSObject {
   func SomeSwift()
  {

  }
}

person al03    schedule 01.12.2016    source источник
comment
Функции верхнего уровня не поддерживаются: developer.apple.com/library/content/documentation/Swift/   -  person jtbandes    schedule 01.12.2016


Ответы (1)


Ссылаясь на документацию Apple об использовании Swift из Objective -С:

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

Означает, что ваш класс должен быть @objc class SomeSwift: NSObject (вы правы!), но вы НЕ МОЖЕТЕ получить доступ всему в файле Swift:

Когда вы создаете класс Swift, который происходит от класса Objective-C, класс и его члены — свойства, методы, индексы и инициализаторы — которые совместимы с Objective-C, автоматически доступны из Objective-C. Это исключает функции только для Swift, такие как перечисленные здесь:

Дженерики

Кортежи

Перечисления, определенные в Swift без необработанного типа значения Int

Структуры, определенные в Swift

Функции верхнего уровня, определенные в Swift

Глобальные переменные, определенные в Swift

Псевдонимы типов, определенные в Swift

Вариады в стиле Swift

Вложенные типы

Каррированные функции

Ссылка.

Поэтому вы не можете использовать функцию верхнего уровня SomeSwift.

Даже если вы попытаетесь добавить @objc перед его объявлением, компилятор скажет, что:

введите описание изображения здесь

@objc можно использовать только с членами классов, протоколами @objc и конкретными расширениями классов.

с предложением удалить @objc.

person Ahmad F    schedule 01.12.2016