一尘不染

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

swift

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


阅读 235

收藏
2020-07-07

共1个答案

一尘不染

只是分享我在连接点的日子里发现的东西。 简短的答案 ,导入搜索路径指定Swift在何处查找和导入模块。

模块和语义导入

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

import std.io

它于2012年11月由Apple在LLVM DevMeeting上首次宣布。您仍然可以在此处找到Doug
Gregor的演讲(视频PDF)。在WWDC
2013上,语义导入与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,即使在Swift REPL中,您也可以使用和利用HTML Tidy库的有用API。

  • 进口

    import tidy
    
  • 范例程式码

        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
        }
    }
  • 打印
    <NODE>upper case node</NODE>
    

得出结论

我也尝试过curl模块。实际上,有些API在我测试时并未导入,例如curl_easy_setopt(),让我们希望它们会在不久的将来赶上来。但是我很肯定这为Swift开发人员打开了一扇门。

2020-07-07