美文网首页首页投稿(暂停使用,暂停投稿)iOS-swift
个人Swift 3入门笔记(1) | 不一样的开始

个人Swift 3入门笔记(1) | 不一样的开始

作者: 左蓝 | 来源:发表于2017-01-01 23:21 被阅读166次

不一样的开始

好吧,你打开这篇文章说明你对Swift有一定了解,我就不废话告诉你这是什么玩意了。

尽管Swift的“用武之地”主要是开发IOS或者macOS应用,但是它在Web开发方面也不逊色于传统的Web端开发语言,尽管性能与Golang等相比有一定差距,但是Swift的优势在于你可以学习一门语言就能完成从桌面端、移动端、服务器端的全部后端开发工作。当然桌面端和移动端仅限苹果产品。也就是说如果你的产品集中在苹果平台,Swift大概是个不二的选择。

除此之外让人想用Swift来开发Web端的另一个原因是Swift的语法让人感觉舒服。就开发效率来说,个人认为是可以媲美Python、Ruby的。

苹果平台安装Swift我就不废话了,Windows和Linux的话也是解压就能用,没什么好说的。

因为是教程,所以使用Docker安装不同版本的Swift,以便更好地控制版本,比较版本之间的差异。


运行 Swift 的 Docker 镜像

首先,我们需要Swift开发环境,本文使用Docker构建一个用于Swift简单开发的在线IDE(基于Cloud9 IDE)。

安装Docker不废话,一句话:

curl -sSL https://get.docker.com/ | sh

安装好Docker之后使用下面这句话就可以启动一个用于Swift开发的容器了。自己改用户名密码。

docker run -d -it --privileged=true --name=cloud9 -v ~/workspace:/root/workspace -p 8181:8181 zuolan/swift-ide --auth username:password
运行成功后的界面

如果你想自己构建一个镜像,这份 Dockerfile 可以在Github找到。

Dockerfile

FROM ubuntu:trusty
MAINTAINER ZuoLan <i@zuolan.me>

# If you use Swift package, may be need install libicu-dev, so you can use libicu-dev instead of libicu52.
ENV buildDeps="make build-essential g++ gcc curl ca-certificates git" c9Deps="nodejs" swiftDeps="curl python-dev libedit2 clang libicu52 libxml2"

# Install Cloud9-ide
RUN apt-get update && apt-get upgrade -y \
 && apt-get install -y $buildDeps --no-install-recommends \
 && curl -sL https://deb.nodesource.com/setup_4.x | sudo bash - \
 && apt-get -y install $c9Deps $swiftDeps \
 && npm install -g forever && npm cache clean \
 && git clone https://github.com/c9/core.git /cloud9 && cd /cloud9 \
 && scripts/install-sdk.sh \

# Install Swift
 && cd /usr/local/ \
 && curl -o swift.tar.gz -sL https://swift.org/builds/swift-3.0-release/ubuntu1404/swift-3.0-RELEASE/swift-3.0-RELEASE-ubuntu14.04.tar.gz \
 && tar xzf swift.tar.gz && mv swift-3.0-RELEASE-ubuntu14.04 swift && rm /usr/local/swift.tar.gz \
 && echo 'export PATH=/usr/local/swift/usr/bin:"${PATH}"' >> ~/.bashrc \
 && apt-get autoremove -y $buildDeps \
 && apt-get autoremove -y && apt-get autoclean -y && apt-get clean -y \
 && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
 && npm cache clean
VOLUME /root/workspace
ENV workspace /root/workspace
EXPOSE 8181 
ENTRYPOINT ["forever", "/cloud9/server.js", "-w", "/root/workspace", "-l", "0.0.0.0"]

#CMD["--auth","username:password"]

使用包管理器

虽然是新手,但是基本的概念还是没问题的对吧?

$ mkdir swift             # 新建一个文件夹
$ cd swift
$ swift package init      # 初始化项目
$ tree                    # 看一下项目目录结构
.
|-- Package.swift
|-- Sources
|   `-- swift.swift
`-- Tests
    |-- LinuxMain.swift
    `-- swiftTests
        `-- swiftTests.swift

3 directories, 4 files
$ swift build             # 构建项目
$ swift test              # 测试项目

构建可执行文件

再新建一个项目吧!~

$ mkdir swift-ex                                        # 新建一个文件夹
$ cd swift-ex
$ swift package init --type executable                  # 初始化项目
$ swift build
Creating executable package: swift-ex
Creating Package.swift
Creating .gitignore
Creating Sources/
Creating Sources/main.swift
Creating Tests/
$ swift build
Compile Swift Module 'swift_ex' (1 sources)
Linking ./.build/debug/swift-ex
$ ./.build/debug/swift-ex                                # 执行可执行文件
Hello, world!

这样第一个Hello World项目就出来了。

使用多个源文件

再来一个多文件的项目,算熟悉一下这些工具吧,反正还没正式开始进入学习呢。
编辑一个文件:$ vi Greeter.swift
这里使用vi编辑器是因为在Linux环境下啊,教程基础部分都是在Linux下操作的,一个编辑器而已,不用在意。

文件内容:

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

再编辑一个文件:$ vi main.swift,内容如下:

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

www(笑),现在就可以构建了,然后运行一下,第二个Hello World项目达成。

$ swift build
Compile Swift Module 'swift_ex' (2 sources)
Linking /root/workspace/swift-ex/.build/debug/swift-ex
$ /root/workspace/swift-ex/.build/debug/swift-ex zuolan
Hello, zuolan!

使用LLDB调试器

调试这个看看就好,以后还会遇到。
编辑文件:$ vi 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 Factorial.swift

看一下文件目录结构:

~/workspace/swift-ex/Sources $ tree
.
|-- Factorial
|-- Factorial.swift
|-- Greeter.swift
`-- main.swift

0 directories, 4 files

关于更多LLDB的命令可以在 LLDB Tutorial 中查阅。

进入调试模式:

$ lldb Factorial
(lldb) target create "Factorial"
Current executable set to 'Factorial' (x86_64).

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

(lldb) r
Process 1834 launched: '/root/workspace/swift-ex/Sources/Factorial' (x86_64)
Process 1834 stopped
* thread #1: tid = 1834, 0x00000000004010ac Factorial`factorial(n=4) -> Int + 12 at Factorial.swift:2, name = 'Factorial', stop reason = breakpoint 1.1
    frame #0: 0x00000000004010ac Factorial`factorial(n=4) -> 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))")

(lldb) p n

(Int) $R0 = 4

(lldb) p n * n

(Int) $R1 = 16

(lldb) bt
* thread #1: tid = 1834, 0x00000000004010ac Factorial`factorial(n=4) -> Int + 12 at Factorial.swift:2, name = 'Factorial', stop reason = breakpoint 1.1
  * frame #0: 0x00000000004010ac Factorial`factorial(n=4) -> Int + 12 at Factorial.swift:2
    frame #1: 0x0000000000400fda Factorial`main + 282 at Factorial.swift:7
    frame #2: 0x00007ffff6e6bf45 libc.so.6`__libc_start_main + 245
    frame #3: 0x0000000000400df9 Factorial`_start + 41

(lldb) c
Process 1834 resuming
Process 1834 stopped
* thread #1: tid = 1834, 0x00000000004010ac Factorial`factorial(n=3) -> Int + 12 at Factorial.swift:2, name = 'Factorial', stop reason = breakpoint 1.1
    frame #0: 0x00000000004010ac Factorial`factorial(n=3) -> 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))")

(lldb) p n

(Int) $R2 = 3

(lldb) br di
All breakpoints disabled. (1 breakpoints)

(lldb) c
Process 1834 resuming
4! is equal to 24
Process 1834 exited with status = 0 (0x00000000) 

(lldb) ^D
~/workspace/swift-ex/Sources $

最后一部分没什么好看的,刚开始基本用不上。


这是第一篇咯 | 下一篇:常量和变量


目录

  1. 不一样的开始
  2. 常量和变量
  3. 基本数据类型
  4. 可选型

相关文章

网友评论

    本文标题:个人Swift 3入门笔记(1) | 不一样的开始

    本文链接:https://www.haomeiwen.com/subject/avpimttx.html