文档章节

Getting Started:Ubuntu体验Swift

oscfrh
 oscfrh
发布于 2016/07/26 16:17
字数 1039
阅读 59
收藏 0

Ubuntu下使用Swift入门


安装swift

使用REPL

使用swift命令运行REPL

    $ swift
    Welcome to Apple Swift version 2.2. Type :help for assistance.
    1>

REPL是体验swift极好的工具,比如输入表达式1+2

1> 1 + 2
$R0: Int = 3

可以定义变量和常量,并且在后面的行中使用他们

2> let greeting = "Hello!"
greeting: String = "Hello!"
3> print(greeting)
Hello!

如果输入了不合法的表达式,REPL会提示错误信息

let answer = "forty"-"two"
error: binary operator '-' cannot be applied to two 'String' operands
let answer = "forty"-"two"
             ~~~~~~~^~~~~~

REPL另一个有用的特性是使用tab键会有提示,比re⇥

5> "Hi!".re⇥
Available completions:
remove(at: Index) -> Character
removeAll() -> Void
removeAll(keepingCapacity: Bool) -> Void
removeSubrange(bounds: ClosedRange<Index>) -> Void
removeSubrange(bounds: Range<Index>) -> Void
replaceSubrange(bounds: ClosedRange<Index>, with: C) -> Void
replaceSubrange(bounds: ClosedRange<Index>, with: String) -> Void
replaceSubrange(bounds: Range<Index>, with: C) -> Void
replaceSubrange(bounds: Range<Index>, with: String) -> Void
reserveCapacity(n: Int) -> Void

REPL开始写一个代码块的时候,比如用for-in迭代一个数组, REPL会在下一行自动缩进,并且将提示符由>改为.

6> let numbers = [1,2,3]
numbers: [Int] = 3 values {
[0] = 1
[1] = 2
[2] = 3
}
7> for n in numbers.reversed() {
8.     print(n)
9. }
3
2
1

使用ctrl+d退出REPL

使用编译系统

swift编译器可以将swift代码编译成库或者可执行文件,并且可以共享给别的项目使用。 通过swift build命令来使用swift编译。

$ swift build --help
OVERVIEW: Build sources into binary products
...

创建一个package

创建一个swift package,首先要创建一个文件夹

$ mkdir Hello
$ cd Hello

每个包根目录必须有一个元文件叫Package.swift,如果不存在,则使用默认的。 创建一个空的元文件

$ touch Package.swift

###构建一个可执行文件### 默认情况下,目录中包含一个main.swift文件,将被编译成可执行文件,可执行文件的 名称为包的名称。

  • 创建目录Sources

      mkdir Sources
    
  • 创建一个main.swift文件

      cd Sources
      vim main.swift
    

    文件内容为

      print("Hello, world!")
    
  • 使用swift build编译

      cd ..
      swift build
    
  • 执行生成的文件

      .build/debug/Hello
      Hello, world!
    

多文件编译

Sources目录下创建Greeter.swift文件

	func sayHello(name: String) {
		print("Hello, \(name)!")
	}

这是一个sayHello函数,参数为name,String类型,修改main.swift文件

	if Process.arguments.count != 2 {
		print("Usage: hello NAME")
	} else {
		let name = Process.arguments[1]
		sayHello(name: name)
	}

这个程序并没有写死name参数,可以在命令行中动态输入参数

	$ swift build
	$ .build/debug/Hello `whoami`

使用LLDB调试

可以使用LLDB进行调试程序,单步执行、设置断点、查看和修改程序的值。 例如 factorial(n:) 函数,创建一个Factorial.swift文件,内容如下

	func factorial(n: Int) -> Int {
		if n <= 1 { return n }
		return n * factorial(n: n - 1)
	}

	let number = 4
	print("\(number)! is equal to \(factorial(n: number))")

使用swiftc命令,-g选项来生成调试信息

	swiftc -g Factorial.swift

使用lldb 命令进行调试

	lldb Factorial

使用b设置断点

	(lldb) b 2
	Breakpoint 1: where = Factorial`Factorial.factorial (Swift.Int) -> Swift.Int + 12 at Factorial.swift:2, address = 0x0000000100000e7c

使用run (r)运行

	(lldb) r
	Process 40246 resuming
	Process 40246 stopped
	* thread #1: tid = 0x14dfdf, 0x0000000100000e7c Factorial`Factorial.factorial (n=4) -> Swift.Int + 12 at Factorial.swift:2, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
		frame #0: 0x0000000100000e7c Factorial`Factorial.factorial (n=4) -> Swift.Int + 12 at Factorial.swift:2
	1    func factorial(n: Int) -> Int {
	-> 2        if n <= 1 { return n }
	3        return n * factorial(n: n - 1)
	4    }
	5
	6    let number = 4
	7    print("\(number)! is equal to \(factorial(n: number))")

使用p查看变量

	(lldb) p n
	(Int) $R0 = 4

使用continue (c)继续运行程序

	(lldb) c
	Process 40246 resuming
	Process 40246 stopped
	* thread #1: tid = 0x14e393, 0x0000000100000e7c Factorial`Factorial.factorial (n=3) -> Swift.Int + 12 at Factorial.swift:2, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
		frame #0: 0x0000000100000e7c Factorial`Factorial.factorial (n=3) -> Swift.Int + 12 at Factorial.swift:2
	1    func factorial(n: Int) -> Int {
	-> 2        if n <= 1 { return n }
	3        return n * factorial(n: n - 1)
	4    }
	5
	6    let number = 4
	7    print("\(number)! is equal to \(factorial(n: number))")

© 著作权归作者所有

oscfrh
粉丝 1
博文 3
码字总数 10337
作品 0
宁波
程序员
私信 提问
Ubuntu上无法使用Swift Build System

今天按照swift官网上的教程(https://swift.org/getting-started/#installing-swift)安装好后,输入swift --version后可以显示相关信息 而且在登陆RPEL也能正常运行 但当输入swift build -...

pipigou
2016/05/09
331
1
云计算相关资料/博客/网上收集的关于OpenStack的一些资源

OpenStack Nova code:https://bugs.launchpad.net/nova OpenStack Blog:http://planet.openstack.org/ OpenStack 官方文档:http://docs.openstack.org/cactus/openstack-compute/admin/co......

DongZhang
2012/02/02
366
0
基于 Cocoa 的 Web 框架--Criollo

Criollo 是一款基于 Cocoa 的 Web 框架,用于 OS X 和 iOS 系统。 Cocoa有助于创建非常快速独立的web应用程序,这些程序直接通过HTTP或FastCGI提供内容。你可以用Objective-C 或者 Swift语言...

匿名
2016/03/19
952
0
Linux平台Swift语言开发学习环境搭建

1.序言 这两天一直忙,没来得及记录东西,周三12月4日凌晨1点多看到苹果正式开源了Swift,国外各大媒体资讯动作超级快。我也兴奋的起来看了一遍关于Swift开源的最新消息。众所周知,苹果平台...

大茶园丁
2015/12/07
8.6K
47
fir.im Weekly - 如何愉悦地进行持续集成

持续集成是一项“一次配置长期受益”的投入,让开发、测试、生产环境的统一变得更加自动高效。 本期 fir.im Weekly 收录了关于 Android、iOS 持续集成的最新实践分享,也有一些开发工具、源码...

风起云飞fir_im
2016/03/07
322
0

没有更多内容

加载失败,请刷新页面

加载更多

golang-字符串-地址分析

demo package mainimport "fmt"func main() {str := "map.baidu.com"fmt.Println(&str, str)str = str[0:5]fmt.Println(&str, str)str = "abc"fmt.Println(&s......

李琼涛
今天
4
0
Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
今天
6
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
今天
4
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
5
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部