什么是Swift编译器 - Xcode 6中的搜索路径导入路径和构建设置?

12
在Xcode 6(Beta)中,有Swift编译器-搜索路径、导入路径。它是什么作用?
1个回答

26

只是分享我在连接数据时发现的东西。简短回答,导入搜索路径SWIFT_INCLUDE_PATHS指定了Swift查找和导入模块的位置。

模块和语义导入

什么是模块?模块通过使用更强大、更有效的语义模型替换文本预处理器包含模型,改进了对软件库API的访问。从用户的角度来看,代码看起来只稍有不同,因为一个使用了导入声明而不是像这样的#include预处理指令:

import std.io

这个模块最初是由苹果在2012年11月的LLVM DevMeeting上宣布的。你仍然可以在这里找到Doug Gregor的演讲(视频PDF)。在WWDC 2013上,Semantic Import与iOS 7一起被引入,@import就是为此而生的。因此,该模块成为了新语言Swift的一部分。模块的文档可以在这里找到。

示例 - 如何导入

为了尝试一下,以下是创建一个带有HTML Tidy库模块的示例应用程序项目的步骤。

  • 在Xcode 6中创建一个Swift项目(OS X或iOS)

  • 创建一个module.map文件,并将其放置在一个目录中。例如:/Users/vladof/module/

     module tidy [system] {
         header "/usr/include/tidy/tidy.h"
         header "/usr/include/tidy/buffio.h"
         link "tidy"
         export *
     }
    
  • 进入“Build Settings”,将Swift Compiler - Search Paths > Import Paths设置为您放置module.map文件的目录。在我的例子中是/Users/vladof/module。然后,您可以使用import tidy并利用HTML Tidy库的有用API,甚至在Swift REPL中。

  • 导入

     import tidy
    
  • 示例代码

     var input: CString = "<node>upper case node</node>"
     var tdoc: TidyDoc = tidyCreate() // 初始化“文档”
     var rc: Int32 = -1
     var ok = tidyOptSetBool(tdoc, TidyUpperCaseTags, yes) // 将标签转换为大写
     ok = tidyOptSetBool(tdoc, TidyXmlTags, yes) // 转换为XML
    
     if ok.value == 1 {
         rc = tidyParseString(tdoc, input) // 解析输入
         if rc >= 0 {
             rc = tidyCleanAndRepair(tdoc) // 整理它
         }
         if rc >= 0 {
             rc = tidySaveStdout(tdoc) // 在控制台上漂亮地打印
         }
     }
    
  • 打印

     <NODE>upper case node</NODE>
    

结论

此外,我已经尝试了curl模块。实际上,在我的测试中,一些API没有被导入,例如curl_easy_setopt(),希望它们能在不久的将来赶上。但我相信这为Swift开发者打开了一扇门。


注意:在Beta 4中,CString和Bool.value已被剥离。 - vladof81
这真让我抓狂。我已经解决了它(在我的情况下是从homebrew安装的MySQL)。但是一旦我移动了我的项目,它就显示“没有这样的模块'mysqlclient_r'”,尽管我已更改了模块的路径。我想我会重新设置项目并复制所有文件。我还清理了DerivedData。还有其他地方我应该查看吗? - qwerty_so
1
@ThomasKilian,这个有用吗?https://devforums.apple.com/message/1070170#1070170 - vladof81
看起来很有前途。与此同时,我也使用了上面的方法,这个方法也行(但显然更繁琐)。我会记住这个方法,下次再用。 - qwerty_so
巧合的是,我在一个没有找到Cocoa的playground中遇到了这个错误(哈哈)。链接的过程解决了这个问题。 - qwerty_so
当使用Cocoapods时,发现Swift编译器导入路径非常有用。只需输入“Pods”并使其递归即可。 - Joe Collins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接