我怎么在Object-C中用Swift

如果你想编译一个应用程序并且这个应用程序包含Swift文件,Swift支持的标准库已经添加到Bundle里面。你可以随时可以在终端运行otool -L查看一个产品包含的FrameWork。这个可以显示你的产品依赖的静态库和FrameWork

如果你用Swift,运行otool -L将会出现所有的Swift的FrameWork

在包含SwiftMyFrameWork运行otool -L

Paste_Image.png

如果你编译的应用没有用到Swift的源文件,只是镶嵌了包含的FrameWork.Xcode将不会在你的app加入这些库。你的应用将会在启动的时候Crash打印下面的错误。

dyld: Library not loaded: @rpath/libswiftCoreGraphics.dylib
  Referenced from: /private/var/mobile/Containers/Bundle/Application/696F0EAD-E2A6-4C83-876F-07E3D015D167/<Your_App>.app/Frameworks/<Framework_Name>.framework/<Framework_Name>
  Reason: image not found

<Your_App><Framework_Name>分别是你应用的和你应用可见的Framework

对于上面问题的解决版本,在build setting里面设置Embedded Content Contains Swift Code (EMBEDDED_CONTENT_CONTAINS_SWIFT)为YES如下面的图所示。这个设置是你的工程包含Swift的代码让Xcode显示Swift的静态库。

设置Swift的代码的静态库可见

Paste_Image.png

为了防止你的APP包含多个Swift的静态库副本,确保Embedded Content Contains Swift Code设置为NO