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

前端 未结 2 847
无人共我
无人共我 2020-12-15 08:37

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

相关标签:
2条回答
  • 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.

    0 讨论(0)
  • 2020-12-15 09:20

    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.

    0 讨论(0)
提交回复
热议问题