什么是Swift编译器 - Xcode 6 Building Settings中的搜索路径导入路径?

vla*_*f81 10 module swift xcode6

在Xcode 6(Beta)中,有Swift编译器 - 搜索路径,导入路径.它有什么作用?

vla*_*f81 20

只是为了分享我在连接点的日子里发现的东西.简短回答,导入搜索路径指定Swift查找和导入模块的位置.

模块和语义导入

什么是模块?模块通过用更健壮,更有效的语义模型替换文本预处理器包含模型来改进对软件库API的访问.从用户的角度来看,代码看起来只是略有不同,因为一个使用导入声明而不是#include预处理器指令,如下所示:

import std.io
Run Code Online (Sandbox Code Playgroud)

它于2012年11月由Apple在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 *
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 在我的案例中,转到构建设置,将Swift Compiler - Search Paths> 设置Import Paths为放入module.map文件的目录/Users/vladof/module.然后import tidy,即使在Swift REPL中,您也可以使用和利用HTML Tidy库的有用API.

  • 进口

    import tidy
    
    Run Code Online (Sandbox Code Playgroud)
  • 示例代码

    var input: CString = "<node>upper case node</node>"
    var tdoc: TidyDoc = tidyCreate() // Initialize "document"
    var rc: Int32 = -1
    var ok = tidyOptSetBool(tdoc, TidyUpperCaseTags, yes) // Convert tags to upper cases
    ok = tidyOptSetBool(tdoc, TidyXmlTags, yes) // Convert to XML
    
    if ok.value == 1 {
        rc = tidyParseString(tdoc, input) // Parse the input
        if rc >= 0 {
            rc = tidyCleanAndRepair(tdoc) // Tidy it up
        }
        if rc >= 0 {
            rc = tidySaveStdout(tdoc) // Pretty print to console
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 打印

    <NODE>upper case node</NODE>
    
    Run Code Online (Sandbox Code Playgroud)

得出结论

我也尝试过curl模块.事实上,有些API在我测试时没有导入,例如curl_easy_setopt(),让我们希望它们能在不久的将来迎头赶上.但我很肯定这为Swift开发者打开了一扇门.