Swift 3——通過(guò)[Swift Package Manager]來(lái)構(gòu)建一個(gè)簡(jiǎn)單的開(kāi)發(fā)環(huán)境。

精彩高清視頻鏈接
泊學(xué) 是一個(gè)全棧工程師的自學(xué)網(wǎng)站 —— 泊學(xué)

我們看看如何通過(guò)Swift Package Manager(以下簡(jiǎn)稱SPM)來(lái)構(gòu)建一個(gè)簡(jiǎn)單的開(kāi)發(fā)環(huán)境煎饼。

創(chuàng)建一個(gè)Product

假設(shè)我們要?jiǎng)?chuàng)建一個(gè)最基本的平衡二叉樹(shù)廉嚼,可以執(zhí)行下面這些命令:

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

這樣,SPM就會(huì)為我們創(chuàng)建下面的目錄結(jié)構(gòu):


SPM demo
SPM demo

在這個(gè)目錄結(jié)構(gòu)里告组,我們可以了解以下內(nèi)容:

  • Swift通過(guò)Modules來(lái)管理代碼,默認(rèn)情況下癌佩,所有在Sources目錄下的文件都在同一個(gè)module中(稍后我們也會(huì)看到多個(gè)module的情況)木缝;
  • 所有Sources目錄中的代碼和根目錄的Package.swift文件形成了一個(gè)Package
  • 在一個(gè)Package里围辙,我們可以定義一個(gè)或多個(gè)Target我碟;
  • Target可以是我們?cè)谝婚_(kāi)始定義的library,它可以被其他的Swift module使用姚建;也可以是一個(gè)executable矫俺,稍后,我們會(huì)看到它的用法掸冤;

創(chuàng)建第一個(gè)module

Sources根目錄中厘托,所有源代碼默認(rèn)都是在同一個(gè)module中的。我們先在BST.swift
中編寫一些示例代碼:

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

它們當(dāng)然還不是BST的正式實(shí)現(xiàn)稿湿,我們?cè)谶@里只是為了演示module的用法铅匹。然后,我們?cè)?code>Tests/BSTTests/BSTTests.swift里饺藤,添加一個(gè)演示用的測(cè)試用例:

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

因?yàn)槲覀儗?shí)現(xiàn)的CustomStringConvertible只是簡(jiǎn)單返回了字符串"BST"伊群,因此上面的比較應(yīng)該是相等的。
完成之后策精,在項(xiàng)目根目錄執(zhí)行:swift build,我們就生成了一個(gè)Swift module:

SPM demo
SPM demo

執(zhí)行swift test崇棠,SPM就會(huì)幫我們完成之前定義的測(cè)試用例:

SPM demo
SPM demo

從上面的結(jié)果可以看到咽袜,所有測(cè)試都通過(guò)了。不過(guò)枕稀,我們創(chuàng)建library询刹,最終還是為了提供給應(yīng)用程序使用的谜嫉。因此,接下來(lái)凹联,我們就來(lái)了解如何給package添加一個(gè)可執(zhí)行程序沐兰,我們把它定義在一個(gè)新的module中。

創(chuàng)建多個(gè)module

默認(rèn)情況下蔽挠,Sources目錄中所有代碼都是在同一個(gè)module中的住闯。因此,要?jiǎng)?chuàng)建多個(gè)module澳淑,我們要在Sources目錄中創(chuàng)建多個(gè)子目錄比原,像這樣:

  • BST:表示BST module,并且把之前創(chuàng)建的BST.swift移動(dòng)到這里杠巡;
  • Application:表示我們要新添加的應(yīng)用程序量窘;在其中,添加一個(gè)main.swift氢拥;這是每一個(gè)應(yīng)用程序都必須定義的文件蚌铜;

最終,我們的目錄看起來(lái)是這樣的:


SPM demo
SPM demo

然后嫩海,在main.swift中冬殃,添加下面的代碼:

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

重新執(zhí)行swift build,我們會(huì)得到下面的錯(cuò)誤:

SPM demo
SPM demo

顯然出革,盡管我們使用了import BST造壮,SPM在生成Application module的時(shí)候,并不知道它和BST之間存在依賴關(guān)系骂束。為了解決這個(gè)問(wèn)題耳璧,我們需要在Package.swift中,添加必要的依賴關(guān)系:

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

這樣展箱,我們就創(chuàng)建了一個(gè)叫做Application的target旨枯,它依賴我們之前創(chuàng)建的BST module。完成后混驰,重新執(zhí)行swift build攀隔,就可以看到成功了:

SPM demo
SPM demo

編譯好的兩個(gè)swift module在./build/debug目錄中,我們直接執(zhí)行Application
就可以看到結(jié)果了:

SPM demo
SPM demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末栖榨,一起剝皮案震驚了整個(gè)濱河市昆汹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌婴栽,老刑警劉巖满粗,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異愚争,居然都是意外死亡映皆,警方通過(guò)查閱死者的電腦和手機(jī)挤聘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)捅彻,“玉大人组去,你說(shuō)我怎么就攤上這事〔窖停” “怎么了从隆?”我有些...
    開(kāi)封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)贤旷。 經(jīng)常有香客問(wèn)我广料,道長(zhǎng),這世上最難降的妖魔是什么幼驶? 我笑而不...
    開(kāi)封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任艾杏,我火速辦了婚禮,結(jié)果婚禮上盅藻,老公的妹妹穿的比我還像新娘购桑。我一直安慰自己,他們只是感情好氏淑,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布勃蜘。 她就那樣靜靜地躺著,像睡著了一般假残。 火紅的嫁衣襯著肌膚如雪缭贡。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天辉懒,我揣著相機(jī)與錄音阳惹,去河邊找鬼。 笑死眶俩,一個(gè)胖子當(dāng)著我的面吹牛莹汤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播颠印,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼纲岭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了线罕?” 一聲冷哼從身側(cè)響起止潮,我...
    開(kāi)封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钞楼,沒(méi)想到半個(gè)月后沽翔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年仅偎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雳殊。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡橘沥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出夯秃,到底是詐尸還是另有隱情座咆,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布仓洼,位于F島的核電站介陶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏色建。R本人自食惡果不足惜哺呜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望箕戳。 院中可真熱鬧某残,春花似錦、人聲如沸陵吸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)壮虫。三九已至澳厢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間囚似,已是汗流浹背剩拢。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谆构,地道東北人裸扶。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像搬素,于是被迫代替她去往敵國(guó)和親呵晨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容