Swift初探01 變量與控制流

Swift初探01 變量與控制流

輸出"hello world"是幾乎學習全部編程語言的第一課,這是程序員的情懷。程序員

因此咱們學習swift的第一步,就是輸出一句"Hello, world"編程

print("Hello, world!")

在swift裏,咱們不須要C語言的main函數,也不須要和Java同樣,上來就須要寫一個class和一個main,咱們甚至不須要爲了輸入輸出或者字符串處理導入一個單獨的庫。swift

在全局做用域中的代碼會被自動看成程序的入口點。數組

01 簡單值

  • let來聲明常量
  • var來聲明變量

和其餘語言同樣,常量必須且只能賦值一次,而且必須在聲明的時候進行賦值。app

var variable = 250
variable = 99
let constant = 32

雖然咱們在寫的時候沒有聲明變量的類型,可是並不意味着swift就是一門弱類型語言,swift是強類型的。編程語言

swift有一個自動推斷機制,在你經過一個值來聲明一個常量或者變量的時候,編譯器會自動推斷類型。而且在以後的賦值修改中,不能夠直接的換成另外一個數據類型!函數

好比上面的聲明中,swift經過var variable = 250已經推斷出該變量是整型。學習

其實真正的聲明是這樣的:code

var variable: String = "hello swift"
let constant: Double = 12
type(of: variable) // String.Type
type(of: constant) // Double.Type

swift中,值永遠不會被隱式轉換爲其餘類型。若是須要把一個值轉換成其餘類型,請顯式轉換。orm

例如:String(variable)便可將variable變量轉化爲字符串類型。

或者使用:let apple: String = "\(variable)"。(這種寫法我的比較推薦)

咱們還能夠使用三引號""" """來包裹一個多行的字符串內容:

let apple = 666
let quotation = """
    徐航宇
真的"\(apples)"
"""

這裏官方文檔寫的是:每行行首的縮進會被去除,直到和結尾引號的縮進相匹配。

其實我我的沒太看懂,由於每行行首的縮進是真實存在的,在輸出時也是存在的。

數組和字典能夠使用方括號 [] 來建立,並使用下標或者鍵(key)來訪問元素(最後一個元素後面容許有個逗號):

var shoppingList = ["可樂", "薯片", "炸雞"]
shoppingList[1] = "農夫山泉"

var occupations = [
    "徐航宇": "武漢",
    "劉好": "山西",
]
occupations["aha"] = "ala"

這裏注意,字典類型是能夠直接經過[key]來添加元素的,可是數組是不能夠直接這樣添加的,必須使用append()或者其餘方法來添加:

shoppingList.append("百歲山")
print(shoppingList) // 數組在添加元素時會自動變大

使用初始化語法來建立一個空數組或者空字典:

let emptyArray = [String]()
let emptyDictionary = [String: Float]()

一樣能夠使用類型推斷來建立空數組和空字典:

shoppingList = []
occupations = [:]

好像不能夠經過類型推斷建立空的變量:

var a // 報錯
var b: Int // 不報錯

02 控制流

  • 使用 ifswitch 來進行條件操做
  • 使用 for-inwhilerepeat-while 來進行循環迭代

包裹條件和循環變量的括號能夠省略(建議保留,加強可讀性),可是語句體的大括號是必須的:

let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
    if score > 50 {
        teamScore += 3
    } else {
        teamScore += 1
    }
}
print(teamScore)

if 語句中,條件必須是一個布爾表達式,若是是一個別的數值,就像剛剛提到過的——swift不會本身作隱形轉換,該值不會隱形地與 0 作對比得出一個布爾值(可是會獲得一個報錯)。

這個時候若是咱們這樣來寫:

var optionalName: String? = "徐航宇"
var greeting = "Hello!"
if let name = optionalName {
  greeting = "Hello, \(name)"
}
print(greeting)

這裏if+let有什麼用呢?

這個?表述的是可選類型,也就是說,能夠同時值爲nil和制定類型的變量類型。

若是這個地方optionalName不是nil,那麼就會將值賦給前面let的常量name,而且能夠繼續執行大括號中的代碼;若是他是nil,那麼這個位置會被斷定爲false,什麼也不操做,而且跳過大括號中的代碼。

合併空值運算符也是能夠處理nil值一種方法:

let nickName: String? = nil
let fullName: String = "John Appleseed"
let informalGreeting = "Hi \(nickName ?? fullName)"

若是??前的值是nil,那麼會取後面的值;若是不是nil,那麼將會取他本身的值。也就是後面的值至關於默認值。

這裏最後在談一下可選類型。

首先,如何使用可選類型?

  • var a:Int? = 10 // print結果爲:Optional(10)
  • 若輸入var a:Int = nil或是var a = nil // 會報錯。
  • var a:Int? = nil // print結果爲:nil

能夠看到,可選類型通常用於處理值缺失的狀況。

若變量在運算或者輸出時有合適的值,則輸出值;若沒有合適的值,則輸出? =後的值。

那麼如何取出Optional的值?

使用 ! 能夠取出真實值:

var a:Int? = nill

a = 10
print(a) // Optional(10)
print(a!) // 10

var b:Int? = nil
print(b!) // 報錯

隱式展開

若是直接肯定了該變量必然有值,能夠用 ! 代替 ? 。

var a:Int! = 5

print(a) // 輸出5,而不是Optional(5)

記住,nil也是一種值。

var a:String? = "hello world"

if(a == nil){
	print("nil也是一種值")
} else {
  print("a的值爲空,此時使用" + a + "來替代") // 報錯
  print("a的值爲空,此時使用" + a! + "來替代") // hello world
}

注意:a的值爲可選類型Optional("hello world"),須要使用 ! 取出真實值。

當咱們使a = nil時,發現輸出nil也是一種值;當咱們什麼也不寫時,輸出a的值爲空,此時使用hello world來替代

關於可選類型綁定

能夠使用如下方法快捷賦值:

var a:Int? = nil

if let value = a{ // 也能夠用var

	print(value)

} else {

	print("value沒被賦值")

}

PS: value的做用域只在 if{} 之中。

相關文章
相關標籤/搜索