Linux下配置Swift开发环境和初步使用
不想干活了,整理一下如何在Linux下配置Swift的开发环境和初步的使用,如果你是圈内人你肯定清楚Swift,否则你会有疑问Swift是什么鬼,你以为我会在这里告诉你Swift的详细内容吗?就一句话Swift是Apple公司在2014年开发者大会上发布的一门新的开发语言(详细内容还是问谷哥或者点我吧或者戳我!)。
测试平台
Ubuntu15.10
搭建开发环境
安装相应依赖包和下载安装Swift包,做相应环境配置。
安装依赖包
swift的使用和开发会依赖clang
和libicu-dev
开发包,所以在使用Swift之前先安装一下,终端下执行命令安装即可:
$ sudo apt-get install clang libicu-dev
下载最新Swift包
点我可以跳转到下载页面,页面最顶部就是最新的发行包,其中格式为swift-<VERSION>-<PLATFORM>.tar.gz
的文件便是Swift开发要用到的工具链,.sig
文件是数字签名文件。
导入PGP密钥
如果是第一次下载Swift包,需要将导入GPG密钥导入到你的密钥环中,两种方式:
$ gpg --keyserver hkp://pool.sks-keyservers.net \
--recv-keys \
'7463 A81A 4B2E EA1B 551F FBCF D441 C977 412B 37AD' \
'1BE1 E29A 084C B305 F397 D62A 9F59 7F4D 21A5 6D5F'
或者
$ wget -q -O - https://swift.org/keys/all-keys.asc | gpg --import -
验证GPG签名
linux的.tar.gz
压缩包都是使用Swift开源项目的密钥通过GnuPG签名了的,苹果建议和鼓励每个将要使用Swift软件包的人都进行签名验证,此步可以省略(不验证不影响使用),但还是按照他们的建议进行验证吧。
更新密钥
首先,如果需要的话,可以更新密钥使原来的证书作废:
$ gpg --keyserver hkp://pool.sks-keyservers.net --refresh-keys Swift
验证
然后,使用签名文件验证关联的Swift压缩包:
$ gpg --verify swift-<VERSION>-<PLATFORM>.tar.gz.sig
...
gpg: Good signature from "Swift Automatic Signing Key #1 <swift-infrastructure@swift.org>"
如果验证失败,可能是因为没有公共密钥(gpg: Can't check signature: No public key
),可以按照激活签名密钥的方法导入密钥。
不顺利的话,还有可能会看到一个警告,汗!!!:
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
这个警告说明在密钥与系统间没有可信的网络路径,只要是按照上面的步骤从可信的的来源获取的密钥,警告几乎没有影响。
解压压缩包
按照下面命令解压下载的压缩包,需要将下面命令中压缩包的名字改成下载的,解压后的文件目录里有usr/
目录。
$ tar xzf swift-<VERSION>-<PLATFORM>.tar.gz
添加路径
需要将解压出来的Swift工具链添加到PATH变量里,可以执行下面的命令(**注:**需要将/path/to/
换成解压后Swift工具链的目录):
$ export PATH=/path/to/usr/bin:"${PATH}"
激活签名密钥
Swift工程为开发版的使用一个密钥集,为每个官方发行版的提供独立的密钥,都是使用4096-bit RSA密钥。
下面是获取签名工具链密钥的两种方法:
-
Swift自动签名密钥 #1 <swift-infrastructure@swift.org>
Download: https://swift.org/keys/automatic-signing-key-1.asc
Fingerprint: 7463 A81A 4B2E EA1B 551F FBCF D441 C977 412B 37AD
Long ID: D441C977412B37AD
执行下面命令导入密钥:
$ gpg --keyserver hkp://pool.sks-keyservers.net \ --recv-keys \ '7463 A81A 4B2E EA1B 551F FBCF D441 C977 412B 37AD'
或者:
$ wget -q -O - https://swift.org/keys/automatic-signing-key-1.asc | gpg --import -
-
Swift 2.2 发行版签名密钥 <swift-infrastructure@swift.org>
Download: https://swift.org/keys/release-key-swift-2.2.asc Fingerprint: 1BE1 E29A 084C B305 F397 D62A 9F59 7F4D 21A5 6D5F Long ID: 9F597F4D21A56D5F
执行下面命令导入密钥:
$ gpg --keyserver hkp://pool.sks-keyservers.net \ --recv-keys \ '1BE1 E29A 084C B305 F397 D62A 9F59 7F4D 21A5 6D5F'
或者:
$ wget -q -O - https://swift.org/keys/release-key-swift-2.2.asc | gpg --import -
使用REPL
如果在命令行中执行swift命令,就会启动REPL,它是一个可交互的Shell窗口,可以读取、计算和打印你所输入的Swift代码。
$ swift
Welcome to Apple Swift version 2.2. Type :help for assistance.
1>
与REPL交互是探索Swift极好的方式,比如输入表达式1 + 2
,敲回车便会计算出结果,3
,在下一行中打印出来:
1> 1 + 2
$R0: Int = 3
可以为变量和常量赋值,后续可以使用它们。比如将String
类型的Hello, world!
赋值给greeting
常量,然后可以使用print(_:)
函数进行打印:
2> let greeting = "hello!"
greeting: String = "Hello!"
3> print(greeting)
Hello!
如果输入一个无效的表达式,REPL会打印出错误并标明出错的位置,就像下面:
let answer = "fourty"-"two"
error: binary operator '-' cannot be applied to two 'String' operands
let answer = "fourty"-"two"
~~~~~~~~^~~~~~
可以使用UP
键和DOWN
键循环查看之前在REPL中输入过的文本行。这让你可以稍微修改过去输入过的文本而不用输入全部内容,比如对于修改上面例子中错误就很方便:
let answer = "fourty-two"
answer: String = "fourty-two"
REPL还有一个很有用的特性:在输入特定文本后可以提示函数和方法。比如,在一个String
后输入re
在按下TAB
键,便会给出一个提示可用函数和方法的列表,就像下面那样:
5> "Hi!".re⇥
Available completions:
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
当开始编写一个代码块的时候,比如用for-in
轮询数组时,REPL会在下一行自动缩进,此时行首的提示符会由>
变为.
,表明代码还未输入完整需要输入完整后在进行评估:
6> let numbers = [1,2,3]
numbers: [Int] = 3 values {
[0] = 1
[1] = 2
[2] = 3
}
7> for n in numbers.reverse() {
8. print(n)
9. }
3
2
1
Swift的所有函数在REPL中都是可以调用的,从编写控制流到声明和实例化结构体和类都是可以的。另外可以导入可用的系统模块,比如OSX下的Darwin
和Linux下的Glibc
:
OSX下:
1> import Darwin
2> arc4random_uniform(10)
$R0: UInt32 = 4
Linux下:
1> import Glibc
2> random() % 10
$R0: Int32 = 4
使用编译系统
Swift的编译系统可以用来编译库、可执行程序和在不同工程之间分享代码。
在官方文档中,使用swift build
来讲解的,但我安装了Swift 2.2后发现按照他们的教程操作发现,竟然没有了swift build工具,简直想骂娘,但我还是忍住了,经过本菜鸟探索了一下,用swiftc
可以用来编译生成可执行程序。
可以调用swift build --help
来看一下,结果会有以下提示:
$ swift build --help
error: unable to invoke subcommand: /home/smslit/Applications/swift/usr/bin/swift-build (No such file or directory)
后来,我有重新安装了开发版的Swift,里面有build命令,所以如果用的是开发版的可以将下面的swiftc 换成swift build。
可以使用官方例程,来尝试一下swiftc
,可以执行命令swiftc -h
查看swiftc的使用方法。
创建代码包
-
创建
hello/Sources
目录,并进入hello
目录下:$ mkdir -p hello/Sources $ cd hello
-
创建包管理文件
Package.swift
:$ touch Package.swift
编辑代码
在Sources
目录下新建main.swift
文件,并输入代码print("Hello, Monkey!")
:
$ touch Sources/main.swift
$ echo "print(\"Hello, Monkey!\")" > Sources/main.swift
编译生成可执行文件
使用swiftc
进行编译,在包根目录下生成名为hello
的可执行文件,使用swiftc
命令的-o
参数。
$ swiftc Sources/main.swift -o hello
测试执行
一切顺利的话,应该已经生成hello
可执行文件,可以执行测试一下,正常的话应该是如下的结果:
$ ./hello
Hello, Monkey!
虽然已经学习过Swift语言的语法和规则,但实践很少,所以想在linux平台好进一步通过一定实践进一步学习swift,路慢慢其修远兮呀!