精彩高清视频链接
泊学 是一个全栈工程师的自学网站 —— 泊学

我们看看如何通过Swift Package Manager(以下简称SPM)来构建一个简单的开发环境。

创建一个Product

假设我们要创建一个最基本的平衡二叉树,可以执行下面这些命令:

mkdir BST
cd BST
swift package init --type=library

这样,SPM就会为我们创建下面的目录结构:

在这个目录结构里,我们可以了解以下内容:

  • Swift通过Modules来管理代码,默认情况下,所有在Sources目录下的文件都在同一个module中(稍后我们也会看到多个module的情况);

  • 所有Sources目录中的代码和根目录的Package.swift文件形成了一个Package

  • 在一个Package里,我们可以定义一个或多个Target

  • Target可以是我们在一开始定义的library,它可以被其他的Swift module使用;也可以是一个executable,稍后,我们会看到它的用法;

创建第一个module

Sources根目录中,所有源代码默认都是在同一个module中的。我们先在BST.swift
中编写一些示例代码:

open class BST { 
    public init() { 
        print("New BST initialized.") 
    }
}
extension BST: customstringconvertible { 
    public var description: String { 
        return "BST" 
    }
}

它们当然还不是BST的正式实现,我们在这里只是为了演示module的用法。然后,我们在Tests/BSTTests/BSTTests.swift里,添加一个演示用的测试用例:

class BSTTests: XCTestCase { 
    func testExample() { 
        XCTAssertEqual(BST().description,"BST") 
    }
}

因为我们实现的customstringconvertible只是简单返回了字符串"BST",因此上面的比较应该是相等的。
完成之后,在项目根目录执行:swift build,我们就生成了一个Swift module:

执行swift test,SPM就会帮我们完成之前定义的测试用例:

从上面的结果可以看到,所有测试都通过了。不过,我们创建library,最终还是为了提供给应用程序使用的。因此,接下来,我们就来了解如何给package添加一个可执行程序,我们把它定义在一个新的module中。

创建多个module

默认情况下,Sources目录中所有代码都是在同一个module中的。因此,要创建多个module,我们要在Sources目录中创建多个子目录,像这样:

  • BST:表示BST module,并且把之前创建的BST.swift移动到这里;

  • Application:表示我们要新添加的应用程序;在其中,添加一个main.swift;这是每一个应用程序都必须定义的文件;

最终,我们的目录看起来是这样的:

然后,在main.swift中,添加下面的代码:

import BST
let bst = BST()
print(bst)

重新执行swift build,我们会得到下面的错误:

显然,尽管我们使用了import BST,SPM在生成Application module的时候,并不知道它和BST之间存在依赖关系。为了解决这个问题,我们需要在Package.swift中,添加必要的依赖关系:

let package = Package( 
    name: "BST",targets: [ 
        Target(name: "Application",dependencies: ["BST"]) 
    ]
)

这样,我们就创建了一个叫做Application的target,它依赖我们之前创建的BST module。完成后,重新执行swift build,就可以看到成功了:

编译好的两个swift module在./build/debug目录中,我们直接执行Application
就可以看到结果了:

如何通过Swift Package Manager 来构建一个简单的开发环境的更多相关文章

  1. 如何通过Swift Package Manager 来构建一个简单的开发环境

    为了解决这个问题,我们需要在Package.swift中,添加必要的依赖关系:这样,我们就创建了一个叫做Application的target,它依赖我们之前创建的BSTmodule。

  2. C中的迭代BST插入

    我试图了解BST以及如何迭代地将元素插入其中.我的节点结构实现如下:我的插入实现看起来像这样:将第一个节点添加到空树时插入工作,但每当我尝试添加更多节点时,我都会遇到分段错误.我知道有些帖子显示了如何在BST中实现插入,但大多数都显示了递归方法,而那些具有迭代示例的方法则不完整或过于具体.谢谢.解决方法我昨晚能够使我的原始代码工作,我在这里分享答案:为了我自己的缘故,我想在不使用双指针的情况下解决

  3. 【数据结构】二叉搜索树BST

    为了强调这种区别,特称二叉搜索树的值为键,把节点存储的其他数据信息称为值。

  4. java – 为JodaTime Instant添加一些天

    这会夺走DST问题.如果不是,那么在模糊或不存在的情况下你想要它做什么.

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部