文档章节

Linux平台Swift语言开发学习环境搭建

大茶园丁
 大茶园丁
发布于 2015/12/07 01:47
字数 1828
阅读 8355
收藏 185
点赞 18
评论 47

####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 工具链压缩包,打开终端,输入命令新建目录并下载

diveinedu@diveinedu-VirtualBox:~$ mkdir swift && cd swift;
diveinedu@diveinedu-VirtualBox:~/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/binusr/lib等等子目录:

diveinedu@diveinedu-VirtualBox:~/swift$ tar xvf swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10.tar.gz
diveinedu@diveinedu-VirtualBox:~/swift$ cd swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10/

然后配置用户级别的环境变量,编辑$HOME/.bashrc配置文件

diveinedu@diveinedu-VirtualBox:~/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,在上面的环境变量设置完后重开终端就可以直接使用了,如下所示。

diveinedu@diveinedu-VirtualBox:~$ 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 = "diveinedu"
world: String = "diveinedu"
  3> let space = " "
space: String = " "
  4> print(hello+space+world);
hello diveinedu
  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解析器中直接输入类的定义和对象创建和简单使用。

diveinedu@diveinedu-VirtualBox:~$ swift
Welcome to Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c). Type :help for assistance.
  1> struct Resolution {
  2.     var width = 0
  3.     var height = 0
  4. }
  5. class VideoMode {
  6.     var resolution = Resolution()
  7.     var interlaced = false
  8.     var frameRate = 0.0
  9.     var name: String?
 10.     func description()
 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

diveinedu@diveinedu-VirtualBox:~$ mkdir -p $HOME/swift/swiftcode
diveinedu@diveinedu-VirtualBox:~$ cd  $HOME/swift/swiftcode
diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$ gedit test.swift

当打开gedit文本编辑器后,输入上面的类和对象创建以及方法调用的代码,列出在下面

struct Resolution {
    var width = 0
    var height = 0
}
class VideoMode {
    var resolution = Resolution()
    var interlaced = false
    var frameRate = 0.0
    var name: String?
    func description()
    {
      print("name:\(name) frameRate:\(frameRate)")
    }
}
let mode = VideoMode()
mode.name = "1080p HD"
mode.frameRate = 30.0
mode.description()

保存后关闭编辑器,然后执行swiftc test.swift来编译源文件,会出现如下链接错误:

diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$ swiftc test.swift
<unknown>:0: error: link command failed with exit code 127 (use -v to see invocation)
diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$

解决办法是安装编译依赖clang libicu-dev,输入下面命令回车(会询问当前用户密码)

diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$ sudo apt-get install clang libicu-dev

安装完成后再次执行编译命令swiftc test.swift就顺利编译成功,再当前目录下输出test可执行文件。

diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$ swiftc test.swift
diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$ ./test
name:Optional("1080p HD") frameRate:30.0

而且执行ldd ./test查看此二进制文件依赖的动态库可知,它链接了libswiftCore,这是所有swift程序都会需要的。

diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$ ldd ./test
	linux-vdso.so.1 =>  (0x00007ffcef3f5000)
	libswiftCore.so => /home/diveinedu/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相关的函数,程序照样可以运行,不管是脚本还是编译成二进制可执行文件,这个我以后再细说了。

The Swift Programming Language 2.2

TheSwiftProgrammingLanguage(Swift2.2)

© 著作权归作者所有

共有 人打赏支持
大茶园丁
粉丝 57
博文 15
码字总数 21159
作品 0
长沙
加载中

评论(47)

大茶园丁
大茶园丁

引用来自“李小罢”的评论

还有,问下,为什么我直接打swift不能直接进入解析器的

找不到命令吗?
李小罢
李小罢
还有,问下,为什么我直接打swift不能直接进入解析器的
李小罢
李小罢

引用来自“大茶园丁”的评论

引用来自“李小罢”的评论

这文章被人转了,都说没哪里转的,原来这里才是首发,转的那些文章乱的很

百度搜索ubuntu swift 酷勤网那篇还是在微博宣传的
大茶园丁
大茶园丁

引用来自“李小罢”的评论

这文章被人转了,都说没哪里转的,原来这里才是首发,转的那些文章乱的很

李小罢
李小罢
这文章被人转了,都说没哪里转的,原来这里才是首发,转的那些文章乱的很
大茶园丁
大茶园丁

引用来自“UnixAgain”的评论

在Linux平台开发iOS应用估计还是不靠谱,毕竟那么多基础库没有

更不可能的。swift开源目的不是让人Linux开发iOS应用。而是做其他开发。
UnixAgain
UnixAgain
在Linux平台开发iOS应用估计还是不靠谱,毕竟那么多基础库没有
大茶园丁
大茶园丁

引用来自“阿cat”的评论

引用来自“大茶园丁”的评论

引用来自“霡霂”的评论

是对所有Linux平台通用吗,那个 苹果官网本身就有Ubuntu的环境搭建。

引用来自“Raynor1”的评论

是呀 。他对所有的linux平台都是通用的。。

引用来自“人生想绕几个圈”的评论

给力啊,在Linux下就能开发ios应用了,呵呵

引用来自“Raynor1”的评论

是呀 。我看到苹果能开源这么一个项目。真的太赞了哦。。瞬间觉得苹果高大上啊。。

引用来自“海淀游民”的评论

苹果有非常多的开源项目,很多大家天天用不知道而已,苹果不太像谷歌用开源做宣传噱头
对头,Apple受益于开源社区,贡献于开源社区。从内核到编译器工具链,到浏览器内核Webkit,,,,太多了。

因为走的不是这条道路、开源的只是皮毛还宣传个毛、谷歌是开源来噱头?呵呵、楼上那个不要当脑果粉好吗?

引用来自“树相马”的评论

第一,linux安装这个语言很麻烦。。。。 第二。3楼,再给5年,你也不能在Linux下开发苹果的应用。 苹果一直是开源的敌人,而且算是争锋相对的那种。。。
第一:目前来说,linux安装swift语言的难易是相对的。第二:赞同。再给5年也不能在Linux下开发苹果应用,语言开放就是不再和平台强耦合一起了。最后。苹果一直是开源的敌人,这个不敢苟同,各自保留看法和认识就是。
树相马
树相马

引用来自“阿cat”的评论

引用来自“大茶园丁”的评论

引用来自“霡霂”的评论

是对所有Linux平台通用吗,那个 苹果官网本身就有Ubuntu的环境搭建。

引用来自“Raynor1”的评论

是呀 。他对所有的linux平台都是通用的。。

引用来自“人生想绕几个圈”的评论

给力啊,在Linux下就能开发ios应用了,呵呵

引用来自“Raynor1”的评论

是呀 。我看到苹果能开源这么一个项目。真的太赞了哦。。瞬间觉得苹果高大上啊。。

引用来自“海淀游民”的评论

苹果有非常多的开源项目,很多大家天天用不知道而已,苹果不太像谷歌用开源做宣传噱头
对头,Apple受益于开源社区,贡献于开源社区。从内核到编译器工具链,到浏览器内核Webkit,,,,太多了。

因为走的不是这条道路、开源的只是皮毛还宣传个毛、谷歌是开源来噱头?呵呵、楼上那个不要当脑果粉好吗?
第一,linux安装这个语言很麻烦。。。。 第二。3楼,再给5年,你也不能在Linux下开发苹果的应用。 苹果一直是开源的敌人,而且算是争锋相对的那种。。。
守望辰峰
守望辰峰
楼上吹牛逼吹太牛了。
慕课分享:盘点2014年热门免费开发课程

这篇文章来自慕课网团队的分享,文章从前端开发、后端开发、移动开发和OS 四个方面,分享了2014年度的热门免费课程。 前端开发 《HTML+CSS基础课程》 这门课程从最基本的概念开始讲起,步步深...

2014/12/30
0
0
Centos 7 下安装Go语言运行环境

Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go语言于2009年11月又Google正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后追加Windows...

Oo若离oO
05/16
0
0
一向“圈地自萌”的苹果为什么选择将Swift开源?

苹果在今年六月的WWDC大会上推出了Swift2.0,并宣布将于今年年底前开放源代码。而苹果也在近日正式将Swift语言转成了开源编程语言,并将其放到代码托管网站Github中以供更多开发者共同开发。...

oschina
2015/12/08
5K
27
使用Kotlin语言两年后,我有话要说

使用Kotlin语言已经两年了,它已经成为了我使用频率仅次于Java的编程语言。在此期间,很多人也谈了自己的一些使用感受。但我想,我是最有发言权的。迄今为止,我已经在三个生产环境应用中使用...

欧阳锋
04/28
0
0
15个快速学习苹果Swift编程语言的入门教程

要说今年最火的编程语言是什么。那就非Swift莫属了。当然最主要还是市场炒的比较热,加上官方Swift教程《The Swift Programming Language》在北航的大三学生发起在github上进行协同翻译获得了...

欲思
2014/07/24
19.5K
7
WWDC 2018 - What's New in Swift?

WWDC 2018 Session 401 What's New in Swift? 这个 Session 分为两个部分,前半部分会简单介绍一下 Swift 开源相关的事情,后半部分我们深入了解一下 Swift 4.2 带来了哪些更新。 社区的发展...

四娘
06/10
0
0
几种主流编程语言的优点和缺点比较,不服来怼

在初级程序员阶段,每个人都不可避免遇到选择编程语言和职业方向的难题。我挑选了几个常见的编程语言,分析了优缺点和职业方向,以供想当程序员的人参考。 C/C++ 一句话概括:大多数中国程序...

达尔文
2017/07/22
2.8K
67
QGIS PYTHON 开发环境

QGIS一般可以使用C++和PYTHON两种语言进行扩展开发,而PYTHON相对C++开发具有可移植性、易于学习、应用广泛、开发效率高等优势。利用PYTHON开发会大大提高开发效率降低开发成本,降低开发难度...

GIS开源
04/26
0
0
Android系统源代码分析步骤

目前,互联网行业正在朝着移动互联网方向强劲地发展,而移动互联网的发展离不开背后的移动平台的支撑。众所周知,如今在移动平台市场上,苹果的iOS、谷歌的Android和微软的Windows Phone系统...

紫地瓜
2012/11/19
0
0
学hadoop基础入门之发行版选择

经常会看到这样的问题:零基础学习hadoop难不难?有的人回答说:零基础学习hadoop,没有想象的那么难,也没有想象的那么容易。看到这样的答案不免觉得有些尴尬,这个问题算是白问了,因为这个...

adnb34g
06/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
5
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
1
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
165
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0
开发技术瓶颈期,如何突破

前言 读书、学习的那些事情,以前我也陆续叨叨了不少,但总觉得 “学习方法” 就是一个永远在路上的话题。个人的能力、经验积累与习惯方法不尽相同,而且一篇文章甚至一本书都很难将学习方法...

_小迷糊
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部