Swift: как я могу создать внешний интерфейс для статической библиотеки (аналог публичных заголовков в Objective-C.h)
Мне нужно создать статическую библиотеку с Swift,
и мне нужно знать, как я могу реализовать интерфейс для библиотеки.
В Objective-C я могу отметить необходимые заголовки как общедоступные в фазах сборки,
но в Swift нет заголовков и каких-либо интерфейсов.
Что делать с Swift?
Ответы
Ответ 1
Проще говоря: вы этого не делаете.
Swift - это не язык, который отделяет заголовки и реализации. Когда вы создаете библиотеку или фреймворк на основе Swift и только для потребления Swift, настройка сборки по умолчанию для Xcode DEFINES_MODULE
уже выполняет эту работу для вас. Это создаст файл .swiftmodule
, который будет использоваться import
в других проектах Swift.
Если вы хотите, чтобы ваш код был импортирован из Objective-C, хотя вы можете проверить, включен ли параметр сборки SWIFT_INSTALL_OBJC_HEADER
(который по умолчанию для фреймворков, насколько я знаю). Затем компилятор Swift сгенерирует для вас файл <ProductName>-Swift.h
, который вы можете импортировать в код Objective-C для доступа к вашим классам и функциям Swift.
Ответ 2
Если вы хотите, чтобы ваша инфраструктура Swift
открывала определенные классы для интерфейса, просто пометьте "сущности" (функции, переменные и т.д.) public
:
public class Class {}
public var variable: Int
public func function() { }
По умолчанию все объекты имеют доступ к internal
.
-
public
объекты предназначены для использования в качестве API и могут быть доступны любым файлом, который импортирует модуль, например. в качестве основы, используемой в нескольких ваших проектах.
Объекты -
internal
доступны для всего модуля, который включает определение (например, приложение или целевая платформа).
-
private
объекты доступны только из исходного файла, где они определены.
Источник: официальный блог Swift.