輸出"hello world"
是幾乎學習全部編程語言的第一課,這是程序員的情懷。程序員
因此咱們學習swift的第一步,就是輸出一句"Hello, world"
:編程
print("Hello, world!")
在swift裏,咱們不須要C語言的main函數,也不須要和Java同樣,上來就須要寫一個class和一個main,咱們甚至不須要爲了輸入輸出或者字符串處理導入一個單獨的庫。swift
在全局做用域中的代碼會被自動看成程序的入口點。數組
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 // 不報錯
if
和 switch
來進行條件操做for-in
、while
和 repeat-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{} 之中。