Swift3.0學習筆記(一)

Swift 3.0學習筆記(一)

開始

對於英語比較好的讀者,能夠直接閱讀蘋果官方的文檔。[連接] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.html#//apple_ref/doc/uid/TP40014097-CH2-ID1 )html

編譯環境

swift的專門的編譯工具是Xcode,Xcode如今已經更新到了8.0版本。不夠,Xcode只能在蘋果的MacOS系統下安裝運行。在今年的WWDC大會上,蘋果爲大多數沒有蘋果筆記本的開發者帶來了福音,蘋果在推出swift2.3的同時,宣佈Xcode能在Linux的環境下安裝運行。 Linux環境下的安裝方式:java

$ sudo apt-get install clang 
$ export PATH=/path/to/Swift/usr/bin:"${PATH}" //添加環境變量

REPL編譯運行swift

REPL即交互式編譯環境。咱們在安裝了Xcode後,可使用終端來編譯運行簡單的swift代碼。macos

$ swift --version
Apple Swift version 3.0 (swiftlang-800.0.46.2 clang-800.0.38)
Target: x86_64-apple-macosx10.9

從我終端使用命令運行後的結果能夠知道,我如今的swift已經到了3.0版本。 使用REPL可以讓初學者體驗swift的編程過程。編程

> 1 + 2
$RO: Int = 3

上面的代碼中,實現了簡單的運算。運行的結果出現了Int關鍵字,它是一種數據類型。須要注意的是在swift中,數據類型的首字母須要大寫,這一點與其餘的編程語言有所不一樣。swift

> let greeting="Hello"
> print(greeting)
Hello

上面的代碼中,咱們使用let關鍵字定義了一個常量。不過,這裏咱們並有聲明常量的數據類型,這就體現了swift的強大之處,即類型推斷。所謂的類型推斷就是咱們在定義常量,變量的時候能夠不用聲明數據的類型,它會幫咱們自動進行推斷。app

REPL還有一個強大之處就是函數和方法的顯示。dom

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

在上面的代碼中,在字符串Hi後輸入了方法的前兩個字母re,而後點擊Tab鍵就會將與之相關的方法打印出來。 REPL是至關智能的,當咱們的代碼中須要用到像循環這樣的代碼塊時使用大括號{}能夠實現自動換行。而且在代碼中,循環語句是從**>.**符號結束的部分。編程語言

10>  let number=[1,2,3]
 number: [Int] = 3 values {
  [0] = 1
  [1] = 2
  [2] = 3
 }
 11> for n in numbers.reversed(){ 
 12.  print(n)
 13. }

REPL導入包

14> import Darwin
 15> arc4random_uniform(10) //隨機生成一個10之內的數
$R1: UInt32 = 0
 16> arc4random_uniform(10) //隨機生成一個10之內的數 
$R2: UInt32 = 6

使用包管理器

$ swift package --help 
	OVERVIEW: Perform operations on Swift packages
	......

該命令能夠查看包的幫助信息。ide

建立包

$ mkdir hello //建立名爲hello的文件目錄
$ cd hello //定位到建立的目錄下

由於每一個包都須要有一個名爲Package.swift的配置文件,因此咱們須要使用init命令對包進行初始化。函數

$ swift package init

被初始化後的包增長了Package.swift配置文件,Sources和Tests兩個目錄。Sources目錄下有一個Hello.wift文件;Tests目錄下有一個LinuxMain.swift文件和HelloTests目錄,該目錄下有一個HelloTests.swift文件。

編譯包

$ swift build
Compile Swift Module 'Hello' (1 sources)

運行包

$ swift test 
Compile Swift Module 'helloTests' (1 sources)
Linking ./.build/debug/helloPackageTests.xctest/Contents/MacOS/helloPackageTests
Test Suite 'All tests' started at 2016-09-17 00:24:44.838
Test Suite 'helloPackageTests.xctest' started at 2016-09-17 00:24:44.841
Test Suite 'helloTests' started at 2016-09-17 00:24:44.841
Test Case '-[helloTests.helloTests testExample]' started.
Test Case '-[helloTests.helloTests testExample]' passed (0.005 seconds).
Test Suite 'helloTests' passed at 2016-09-17 00:24:44.847.
	 Executed 1 test, with 0 failures (0 unexpected) in 0.005 (0.005) seconds
Test Suite 'helloPackageTests.xctest' passed at 2016-09-17 00:24:44.847.
	 Executed 1 test, with 0 failures (0 unexpected) in 0.005 (0.006) seconds
Test Suite 'All tests' passed at 2016-09-17 00:24:44.847.
	 Executed 1 test, with 0 failures (0 unexpected) in 0.005 (0.009) seconds

編譯成一個可執行的包

當包裏面包含main.swift文件時,這個包就是可執行的。包文件管理器將編譯這個文件爲二進制的可執行文件。

$ mkdir Hello 
$ cd Hello 
$ swift package init --type executable 
$ swift build 
$ .build/debug/Hello
Hello,World!

在上面的命令運行完以後,咱們發現Tests目錄下是空的,這就是上面的建立的包的不一樣。 另外,在Sources目錄下生成的文件再也不是hello.swift而換成了main.swift 。

使用LLDB調試器

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))")

使用上面的代碼建立名爲Factorial.swift的文件。使用一下命令行編譯代碼:

$ swiftc -g Factorial.java
$ ls 
Factorial.dSYM
Factorial.swift
Factorial

swiftc 命令後加g參數生成一個調試信息,同時在當前目錄下生成一個名爲Factorial的可執行文件。

$ lldb Fatorial
	 (lldb) target create "Factorial"
	Current executable set to 'Factorial' (x86_64).
	(lldb) b 2 
	(lldb) r
	(lldb) p n
	(lldb) c
	(lldb) br di

b 2:在第二行設置斷點(breakpoint); r:運行(run)程序; p n:輸出(print)參數n的值; c:繼續(continue)運行; br di:斷點(breakpoint)取消(disable)。

相關文章
相關標籤/搜索