Swift5.1教程(一)--基礎內容

更多教程,請關注微信號:roclel

本次的教程是基于Swift5.1版本

Swift是一個全新的用戶iOS,MacOS,watchOS和tvOS的應用編程語言。如果你有C和Objective-C開發經驗的話,Swift的許多部門會讓你很熟悉。

Swift 為所有 C 和 Objective-C 的類型提供了自己的版本,包括整型值的 Int ,浮點數值的 Double 和 Float ,布爾量值的 Bool ,字符串值的 String 。如同集合類型中描述的那樣, Swift 同樣也為三個主要的集合類型提供了更高效的版本, Array , Set 和 Dictionary 。

除了我們熟悉的類型之外,Swift還增加了Objective-C 中沒有的類型,元組。元組允許你創建和傳遞一組的數據,你可以用元組當做函數的返回值來返回多個的值

Swift還增加了可選項,用來處理沒有值的情況,它使得Swift更安全,這也充分說明swift是一門類型安全的編程語言,那么現在讓我們開始swift的編程之旅吧

常量和變量

顧名思義,常量的值一旦設置好便不能再被更改,然而變量的值可以在將來被設置成不同的值

聲明常量和變量

常量和變量必須在使用前被申明,使用關鍵字 let 來聲明常量,使用關鍵字 var 來聲明變量。下面是聲明的一個例子

let heigh = 10      //聲明一個常量 不能被修改,否則會編譯錯誤
var weight = 10     //聲明一個變量 后期可以修改

類型標注

你可以在聲明一個常量或者變量的時候提供類型標注,用來確認常量或者變量能夠存儲值的類型。添加類型標注的方式是在常量或者變量的后面加一個冒號,然后加上一個空格,最后加上要使用的類型的名稱。下面舉個例子:

var name: String = "dapeng" //聲明一個String類型的變量name

輸出常量和變量

你可以使用 print(_:separator:terminator:) 函數來打印當前常量和變量中的值。

var name: String = "dapeng"
print(name)
//輸出 dapeng

Swift 使用字符串插值 的方式來把常量名或者變量名當做占位符加入到更長的字符串中,然后讓 Swift 用常量或變量的當前值替換這些占位符。將常量或變量名放入圓括號中并在括號前使用反斜杠將其轉義:

var name: String = "dapeng"
print("\(name) is very good")
//輸出 dapeng is very good

注釋

使用注釋來將不需要執行的文本放入的代碼當中,作為標記或者你自己的提醒。當 Swift 編譯器在編譯代碼的時候會忽略掉你的注釋。swift的注釋和c的注釋基本相同,下面是例子

1.單行注釋

// 這是一個注釋

2.多行注釋

/* this is also a comment,
but written over multiple lines */

分號

和許多其他的語言不同,Swift 并不要求你在每一句代碼結尾寫分號( ; ),當然如果你想寫的話也沒問題。總之,如果你想在一行里寫多句代碼,分號還是需要的

let cat = "mao"
var dog = "dog"
var people = "people";var student = "student"

類型安全和類型推斷

Swift 是一門類型安全的語言。類型安全的語言可以讓你清楚地知道代碼可以處理的值的類型。如果你的一部分代碼期望獲得 String ,你就不能錯誤的傳給它一個 Int 。

舉個例子,如果你給一個新的常量設定一個 42 的字面量,而且沒有說它的類型是什么,Swift 會推斷這個常量的類型是 Int ,因為你給這個常量初始化為一個看起來像是一個整數的數字

let meaningOfLife = 42
// meaningOfLife is inferred to be of type Int

因為 Swift 是類型安全的,他在編譯代碼的時候會進行類型檢查,任何不匹配的類型都會被標記為錯誤。這會幫助你在開發階段更早的發現并修復錯誤。

數值型字面量

整數型字面量可以寫作:

  1. 一個十進制數,沒有前綴
  2. 一個二進制數,前綴是 0b
  3. 一個八進制數,前綴是 0o
  4. 一個十六進制數,前綴是 0x

類型別名

類型別名可以為已經存在的類型定義了一個新的可選名字。用 typealias 關鍵字定義類型別名。

typealias mInt = Int
var age:mInt = 10
var age:Int = 10
//以上兩種age的聲明是等同的

元組

元組把多個值合并成單一的復合型的值。元組內的值可以是任何類型,而且可以不必是同一類型。

在下面的示例中, (404, “Not Found”) 是一個描述了 HTTP 狀態代碼 的元組。HTTP 狀態代碼是當你請求網頁的時候 web 服務器返回的一個特殊值。當你請求不存在的網頁時,就會返回 404 Not Found

let http404Error = (404, "Not Found")
// http404Error is of type (Int, String), and equals (404, "Not Found")

(404, “Not Found”) 元組把一個 Int 和一個 String 組合起來表示 HTTP 狀態代碼的兩種不同的值:數字和人類可讀的描述。他可以被描述為“一個類型為 (Int, String) 的元組”

任何類型的排列都可以被用來創建一個元組,他可以包含任意多的類型。例如 (Int, Int, Int) 或者 (String, Bool) ,實際上,任何類型的組合都是可以的。

你也可以將一個元組的內容分解成單獨的常量或變量,這樣你就可以正常的使用它們了:

let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode)")
// prints "The status code is 404"
print("The status message is \(statusMessage)")
// prints "The status message is Not Found"

當你分解元組的時候,如果只需要使用其中的一部分數據,不需要的數據可以用下滑線( _ )代替:

let (justTheStatusCode, _) = http404Error
print("The status code is \(justTheStatusCode)")
// prints "The status code is 404"

另外一種方法就是利用從零開始的索引數字訪問元組中的單獨元素:

print("The status code is \(http404Error.0)")
// prints "The status code is 404"
print("The status message is \(http404Error.1)")
// prints "The status message is Not Found"

你可以在定義元組的時候給其中的單個元素命名:

let http200Status = (statusCode: 200, description: "OK")

在命名之后,你就可以通過訪問名字來獲取元素的值了:

print("The status code is \(http200Status.statusCode)")
// prints "The status code is 200"
print("The status message is \(http200Status.description)")
// prints "The status message is OK"

作為函數返回值時,元組非常有用。一個用來獲取網頁的函數可能會返回一個 (Int, String) 元組來描述是否獲取成功。相比只能返回一個類型的值,元組能包含兩個不同類型值,他可以讓函數的返回信息更有用。

可選項

可以利用可選項來處理值可能缺失的情況。可選項意味著:這里有一個值,它等于X或者這里根本沒有值

首先明確的一個概念

  1. Objective-C中的nil:表示缺少一個合法的對象,是指向不存在對象的指針,對結構體、枚舉等類型不起作用(會返回NSNotFound)
  2. Swift中的nil:表示任意類型的值缺失,是一個確定的值,要么是該類型的一個值要么什么都沒有(即為nil)

在Swift中Optional(可選類型)是一個含有兩種情況的枚舉,None 和 Some(T),用來表示可能有或可能沒有值。任何類型都可以明確聲明為(或者隱式轉換)可選類型。當聲明一個可選類型的時候,要確保用括號給 ? 操作符一個合適的范圍。

  • 可選類型的聲明
var optionalStr: String? = "swift語言可選類型"http://聲明可選類型字符串,并賦初值
var opStu:Student? //聲明可選opStu對象,賦初值nil

注意:在類型和 ?之間沒有空格

  • 強制解析
    當你確定自定義的可選類型一定有值時,可以使用操作符(!)進行強制解析,拿到數據,嘆號表示”我知道一定有值,請使用它”,但是當你判斷錯誤,可選值為nil時使用(!)進行強制解析,會有運行錯誤。
var myValue:String? = nil
myValue="強制解析,一定有值"
if myValue != nil {
print(myValue!)//使用!進行強制解析
}else{
print("字符串為nil")
}
  • 可選項綁定
    使用可選綁定,擺脫了頻繁的判斷是否為nil在賦值,但是使用可選綁定(optional binding)來判斷可選類型是否包含值,如果包含就把值賦給一個臨時常量或者變量。可選綁定可以用在if和while語句中來對可選類型的值進行判斷并把值賦給一個常量或者變量。

  • 格式

if let tempStr = someOptional{
tempStr//如果someOptiona有值的話,就會賦值給tempStr,然后使用
}
var myStr:String?
myStr="可選綁定的值"
if  let tempStr = myStr { //如果希望修改tempStr的值,可以定義成var
print(tempStr)
}else{
print("字符串為nil")
}

  • 隱式展開可選項
    在最初的聲明時使用?修飾,當你希望它自動解析是可以用!代替?來修飾,這樣在變量使用時就不需要加!來強制拆包,它會自動解析
let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // requires an exclamation mark

let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString // no need for an exclamation mark

print(implicitString)

備注:教程中有關Int Double Float Bool 類型沒有做詳細的介紹,需要了解的小伙伴可以訪問蘋果開發文檔中心查看相關的文檔

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,643評論 2 380