2021-05-12 14:32:11
Linux下搭建Swift語言開發學習環境
介紹在Ubuntu平台搭建Swift開發環境; 介紹Swift指令碼解析器swift的使用; 介紹swift編譯器swiftc的使用;
1.序言
周三12月4日凌晨1點多看到蘋果正式開源了Swift,國外各大媒體資訊動作超級快。我也興奮的起來看了一遍關於Swift開源的最新訊息。眾所周知,蘋果平台的Swift語言已經出來了一年半了,一直在成長,經歷了好幾個版本。許多人盼望的swift開源是希望可以在除了蘋果平台之外的平台可以運用這個新語言。比如有人希望將來可以用swift也可以擼一擼後台開發之類,理論上是沒問題的,但是同樣也有人會噴這麼一個願景,但是開源一出後,多多少少社群人員會去往這個方面去努力的。蘋果官方為swift新搞了個網站swift.org,也放出來了Ubuntu Linux平台的預編譯好的swift工具鏈的打包檔案以及Linux下的編譯指南。我今天寫這麼一部落格的目的就是為了介紹和推廣Swift語言在初學者或者低年級大學生群體中的運用。
2.Swift+Ubuntu環境設定
首先假定我們已經安裝好Ubuntu Linux作業系統了,這個系統安裝很簡單,網上很多的步驟教學,虛擬機器的話推薦用VirtualBox。Swift支援Ubuntu 14.04和15.10兩個髮型版,我這選擇15.10版本的包。
第一步:下載 Swift 2.2
工具鏈壓縮包,開啟終端,輸入命令新建目錄並下載
linuxidc@linuxidc:~$ mkdir swift && cd swift;
linuxidc@linuxidc:~/swift$ wget https://swift.org/builds/ubuntu1510/swift-2.2-SNAPSHOT-2015-12-01-b/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10.tar.gz
第二步:用tar
命令解壓 Swift 2.2
工具鏈壓縮包到當前目錄,並設定環境變數
先解壓,再進入目錄,目錄下會有usr/bin
和usr/lib
等等子目錄:
linuxidc@linuxidc:~/swift$ tar xvf swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10.tar.gz
linuxidc@linuxidc:~/swift$ cd swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10/
然後設定使用者級別的環境變數,編輯$HOME/.bashrc
組態檔
linuxidc@linuxidc:~/swift/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10$ gedit $HOME/.bashrc
上面命令會調出圖形介面文字編輯器GEdit來編輯這個組態檔,在檔案的最後輸入如下設定行並儲存退出編輯器
export SWIFT_HOME=$HOME/swift/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10
export PATH=$SWIFT_HOME/usr/bin:$PATH
export LD_LIBRARY_PATH=$SWIFT_HOME/usr/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=$SWIFT_HOME/usr/lib:$LIBRARY_PATH
這樣環境變數就設定OK啦。這個時候我們只需要關閉我們的Shell終端重新開啟終端就生效了。
3.Swift+Ubuntu初次體驗
搞過iOS開發的都知道,2014年6月Swift剛出世時就隨Xcode帶了Playground功能,可以邊寫邊看執行結果,辣麼在Ubuntu Linux下有沒有類似的呢,也有,只是沒那麼強大的IDE支援,我們一樣可以執行類似Pyhton指令碼解析器一樣的Swift解析器,同步輸入Swift
程式碼來“解析”執行。這個命令就是swift
,在上面的環境變數設定完後重開終端就可以直接使用了,如下所示。
linuxidc@linuxidc:~$ swift
Welcome to Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c). Type :help for assistance.
1> let hello = "hello";
hello: String = "hello"
2> let world = "linuxidc"
world: String = "linuxidc"
3> let space = " "
space: String = " "
4> print(hello+space+world);
hello linuxidc
5>hello.
Available completions:
append(c: Character) -> Void
append(x: UnicodeScalar) -> Void
appendContentsOf(newElements: S) -> Void
appendContentsOf(other: String) -> Void
characters: String.CharacterView
debugDescription: String
endIndex: Index
hashValue: Int
insert(newElement: Character, atIndex: Index) -> Void
insertContentsOf(newElements: S, at: Index) -> Void
isEmpty: Bool
lowercaseString: String
nulTerminatedUTF8: ContiguousArray<CodeUnit>
removeAll() -> Void
removeAll(keepCapacity: Bool) -> Void
removeAtIndex(i: Index) -> Character
removeRange(subRange: Range<Index>) -> Void
replaceRange(subRange: Range<Index>, with: C) -> Void
replaceRange(subRange: Range<Index>, with: String) -> Void
reserveCapacity(n: Int) -> Void
startIndex: Index
unicodeScalars: String.UnicodeScalarView
uppercaseString: String
utf16: String.UTF16View
utf8: String.UTF8View
withCString(f: UnsafePointer<Int8> throws -> ResultUnsafePointer<Int8> throws -> Result) -> Result
withMutableCharacters(body: (inout String.CharacterView) -> R(inout String.CharacterView) -> R) -> R
write(other: String) -> Void
writeTo(&target: Target) -> Void
6> hello.isEmpty
$R0: Bool = false
在這個解析執行介面還有自動提示補全功能!簡直四國矣
.上面第五行是輸入hello
後再輸入一點.
然後按tab
鍵,一下就出來這麼多關於字串的方法,媽媽再也不擔心我在終端模式下不記得方法名了。
上面這特簡單的幾行程式碼還沒包含類和物件,下面看看在swift
解析器中直接輸入類的定義和物件建立和簡單使用。
linuxidc@linuxidc:~$ swift
Welcome to Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c). Type :help for assistance.
1> structResolution{
2. var width = 0
3. var height = 0
4. }
5. classVideoMode{
6. var resolution = Resolution()
7. var interlaced = false
8. var frameRate = 0.0
9. var name: String?
10. funcdescription()
11. {
12. print("name:(name) frameRate:(frameRate)")
13. }
14. }
15> let mode = VideoMode()
mode: VideoMode = {
resolution = {
width = 0
height = 0
}
interlaced = false
frameRate = 0
name = nil
}
16> mode.name = "1080p HD"
17> mode.frameRate = 30.0
18> mode.description()
name:Optional("1080p HD") frameRate:30.0
19>
這些都只是在swift
解析器中臨時性的執行一些程式碼,如果我們需要新建.swift
格式檔案然後編譯成可執行二進位制檔案形式又要怎樣做呢,同樣很簡單,我們可以用swiftc
這個命令來編譯。 我們可以新建一個目錄來存放swift程式碼檔案,然後編輯一個test.swift
:
linuxidc@linuxidc:~$ mkdir -p $HOME/swift/swiftcode
linuxidc@linuxidc:~$ cd $HOME/swift/swiftcode
linuxidc@linuxidc:~/swift/swiftcode$ gedit test.swift
當開啟gedit文字編輯器後,輸入上面的類和物件建立以及方法呼叫的程式碼,列出在下面
structResolution{
var width = 0
var height = 0
}
classVideoMode{
var resolution = Resolution()
var interlaced = false
var frameRate = 0.0
var name: String?
funcdescription(){
print("name:(name) frameRate:(frameRate)")
}
}
let mode = VideoMode()
mode.name = "1080p HD"
mode.frameRate = 30.0
mode.description()
儲存後關閉編輯器,然後執行swiftc test.swift
來編譯原始檔,會出現如下連結錯誤:
linuxidc@linuxidc:~/swift/swiftcode$ swiftc test.swift
<unknown>:0: error: link command failed with exit code 127 (use -v to see invocation)
linuxidc@linuxidc:~/swift/swiftcode$
解決辦法是安裝編譯依賴clang libicu-dev
,輸入下面命令迴車(會詢問當前使用者密碼)
linuxidc@linuxidc:~/swift/swiftcode$ sudo apt-get install clang libicu-dev
安裝完成後再次執行編譯命令swiftc test.swift
就順利編譯成功,再當前目錄下輸出test
可執行檔案。
linuxidc@linuxidc:~/swift/swiftcode$ swiftc test.swift
linuxidc@linuxidc:~/swift/swiftcode$ ./test
name:Optional("1080p HD") frameRate:30.0
而且執行ldd ./test
檢視此二進位制檔案依賴的動態庫可知,它連結了libswiftCore
,這是所有swift
程式都會需要的。
linuxidc@linuxidc:~/swift/swiftcode$ ldd ./test
linux-vdso.so.1 => (0x00007ffcef3f5000)
libswiftCore.so => /home/linuxidc/swift/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10/usr/lib/swift/linux/libswiftCore.so (0x00007f1cd2f75000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f1cd2bdd000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1cd28d5000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f1cd26be000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1cd22f3000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1cd20d5000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1cd1ed1000)
libicuuc.so.55 => /usr/lib/x86_64-linux-gnu/libicuuc.so.55 (0x00007f1cd1b3c000)
libicui18n.so.55 => /usr/lib/x86_64-linux-gnu/libicui18n.so.55 (0x00007f1cd16d9000)
libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f1cd14c9000)
/lib64/ld-linux-x86-64.so.2 (0x0000556e488b7000)
libicudata.so.55 => /usr/lib/x86_64-linux-gnu/libicudata.so.55 (0x00007f1ccfa11000)
細心的讀者會發現好像不見main
函數或者main
相關的函數,程式照樣可以執行,不管是指令碼還是編譯成二進位制可執行檔案,這個我以後再細說了。
Swift 正式開源,同時開源 Swfit 核心庫和包管理器 http://www.linuxidc.com/Linux/2015-12/125847.htm
Apple Swift學習教學 http://www.linuxidc.com/Linux/2014-09/106420.htm
使用 Swift 構建一個 iOS 的郵件應用 http://www.linuxidc.com/Linux/2014-08/105542.htm
Swift 2.0開源化 http://www.linuxidc.com/Linux/2015-06/118594.htm
相關文章