Swift:如何为静态库创建外部接口(Objective-C .h中的公共头模拟)

Ber*_*rgP 13 swift

我需要用Swift创建一个静态库,我需要知道如何实现库的接口.

在Objective-C中,我可以在构建阶段将所需的头标记为公共头,但Swift中没有任何头和任何接口.

我应该怎么做Swift?

pun*_*ode 23

简单地说:你没有.

Swift不是一种分隔标题和实现的语言.当您创建基于Swift的库或框架并且仅供Swift使用时,Xcode默认构建设置DEFINES_MODULE已经为您完成了工作.这将创建一个.swiftmodule文件,将import在其他Swift项目中使用.

如果您希望代码可以从Objective-C导入,您可能需要检查是否SWIFT_INSTALL_OBJC_HEADER还启用了构建设置(就我所知,它默认为框架).然后Swift编译器将为您生成一个<ProductName>-Swift.h文件,您可以使用Objective-C代码导入该文件以访问您的Swift类和函数.

  • 这是否随XCode beta 5而改变?我在项目的任何地方都找不到.swiftmodule文件(带Swift的Cocoa Touch Library) (4认同)

kga*_*dis 6

如果您希望Swift框架将某些类暴露给接口,只需标记"实体"(函数,变量等)public:

public class Class {}
public var variable: Int
public func function() { }
Run Code Online (Sandbox Code Playgroud)

默认情况下,所有实体都有权internal访问.

  • public 实体旨在用作API,并且可以由导入模块的任何文件访问,例如作为多个项目中使用的框架.
  • internal 实体可用于包含定义的整个模块(例如,应用程序或框架目标).
  • private 实体仅在定义它们的源文件中可用.

来源:官方Swift博客.