美文网首页首页投稿(暂停使用,暂停投稿)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