Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swift: how can I create external interface for static library (public headers analog in Objective-C .h)

Tags:

swift

I need to create a static library with Swift, and I need to know how can I implement interface for the library.

In Objective-C I can mark needed headers as public in build phases, but there is not any headers and any interfaces in Swift.

What should I do with Swift?

like image 319
BergP Avatar asked Jun 05 '14 21:06

BergP


2 Answers

Simply put: you don't.

Swift is not a language that separates headers and implementations. When you create a library or framework based on Swift and only for consumption by Swift, the Xcode default build setting of DEFINES_MODULE already does the job for you. This will create a .swiftmodule file, which will be used by import in other Swift projects.

If you want your code to be importable from Objective-C though, you might want to check if the SWIFT_INSTALL_OBJC_HEADER build setting is also enabled (which it is by default for frameworks as far as I know). Then the Swift compiler will generate a <ProductName>-Swift.h file for you, which you can import in Objective-C code to access your Swift classes and functions.

like image 60
punycode Avatar answered Nov 10 '22 22:11

punycode


If you want your Swift framework to expose certain classes to the interface, simply mark the 'entities' (functions, variables etc.) public:

public class Class {}
public var variable: Int
public func function() { }

By default, all entities have internal access.

  • public entities are intended for use as API, and can be accessed by any file that imports the module, e.g. as a framework used in several of your projects.
  • internal entities are available to the entire module that includes the definition (e.g. an app or framework target).
  • private entities are available only from within the source file where they are defined.

Source: the official Swift blog.

like image 26
kgaidis Avatar answered Nov 10 '22 22:11

kgaidis