Swift基本語(yǔ)法之元組和可選類(lèi)型

元組

元組的介紹

  • 元組是Swift中特有的,OC中并沒(méi)有相關(guān)類(lèi)型
  • 它是什么呢?
    • 它是一種數(shù)據(jù)結(jié)構(gòu),在數(shù)學(xué)中應(yīng)用廣泛
    • 類(lèi)似于數(shù)組或者字典
    • 可以用于定義一組數(shù)據(jù)
    • 組成元組類(lèi)型的數(shù)據(jù)可以稱(chēng)為“元素”

元組的定義

  • 元組的常見(jiàn)寫(xiě)法
// 使用元組描述一個(gè)人的信息
("1001", "張三", 30, 90)
// 給元素加上元素名稱(chēng),之后可以通過(guò)元素名稱(chēng)訪(fǎng)問(wèn)元素
(id:"1001", name:"張三", english_score:30, chinese_score:90)

元組的簡(jiǎn)單使用

  • 用元組來(lái)描述一個(gè)HTTP的錯(cuò)誤信息
// 元組:HTTP錯(cuò)誤
// let array = [404, "Not Found"]
// 寫(xiě)法一:
let error = (404, "Not Found")
print(error.0)
print(error.1)

// 寫(xiě)法二:
let error = (errorCode : 404, errorInfo : "Not Found")
print(error.errorCode)
print(error.errorInfo)

// 寫(xiě)法三:
let (errorCode, errorIno) = (404, "Not Found")
print(errorCode)
print(errorIno)

可選類(lèi)型

可選類(lèi)型的介紹

  • 注意:
    • 可選類(lèi)型時(shí)swift中較理解的一個(gè)知識(shí)點(diǎn)
    • 暫時(shí)先了解,多利用Xcode的提示來(lái)使用
    • 隨著學(xué)習(xí)的深入,慢慢理解其中的原理和好處
  • 概念:
    • 在OC開(kāi)發(fā)中,如果一個(gè)變量暫停不使用,可以賦值為0(基本屬性類(lèi)型)或者賦值為空(對(duì)象類(lèi)型)
    • 在swift開(kāi)發(fā)中,nil也是一個(gè)特殊的類(lèi)型.因?yàn)楹驼鎸?shí)的類(lèi)型不匹配是不能賦值的(swift是強(qiáng)類(lèi)型語(yǔ)言)
    • 但是開(kāi)發(fā)中賦值nil,在所難免.因此推出了可選類(lèi)型
  • 可選類(lèi)型的取值:
    • 空值
    • 有值

定義可選類(lèi)型

  • 定義一個(gè)可選類(lèi)型有兩種寫(xiě)法
    • 最基本的寫(xiě)法
    • 語(yǔ)法糖(常用)
// 錯(cuò)誤寫(xiě)法
// let string : String = nil
// 正確寫(xiě)法:
// 注意:name的類(lèi)型是一個(gè)可選類(lèi)型,但是該可選類(lèi)型中可以存放字符串.
// 寫(xiě)法一:定義可選類(lèi)型
let name : Optional<String> = nil

// 寫(xiě)法二:定義可選類(lèi)型,語(yǔ)法糖(常用)
let name : String? = nil

可選類(lèi)型的使用

// 演練一:給可選類(lèi)型賦值
// 定義可選類(lèi)型
var string : Optional<String> = nil

// 給可選類(lèi)型賦值
// 錯(cuò)誤寫(xiě)法:因此該可選類(lèi)型中只能存放字符串
string = 123
// 正確寫(xiě)法:
string = "Hello world"

// 打印結(jié)果
print(string)
// 結(jié)果:Optional("Hello world")\n
// 因?yàn)榇蛴〕鰜?lái)的是可選類(lèi)型,所有會(huì)帶Optional


// 演練二:取出可選類(lèi)型的值
// 取出可選類(lèi)型的真實(shí)值(解包)
print(string!)
// 結(jié)果:Hello world\n

// 注意:如果可選類(lèi)型為nil,強(qiáng)制取出其中的值(解包),會(huì)出錯(cuò)
string = nil
print(string!) // 報(bào)錯(cuò)

// 正確寫(xiě)法:
if string != nil {
    print(string!)
}

// 簡(jiǎn)單寫(xiě)法:為了讓在if語(yǔ)句中可以方便使用string
// 可選綁定
if let str = string {
    print(str)
}

真實(shí)應(yīng)用場(chǎng)景

  • 目的:讓代碼更加嚴(yán)謹(jǐn)
// 通過(guò)該方法創(chuàng)建的URL,可能有值,也可能沒(méi)有值.
// 錯(cuò)誤寫(xiě)法:如果返回值是nil時(shí),就不能接收了
// 如果字符串中有中文,則返回值為nil,因此該方法的返回值就是一個(gè)可選類(lèi)型,而使用一個(gè)NSURL類(lèi)型接收是錯(cuò)誤的
let url : NSURL = NSURL(string: "www.520it.com")

// 正確寫(xiě)法:使用可選類(lèi)型來(lái)接收
let url : NSURL? = NSURL(string: "www.520it.com")
// 該方式利用類(lèi)型推導(dǎo)
let url = NSURL(string: "www.520it.com")

// 通過(guò)url來(lái)創(chuàng)建request對(duì)象:在使用可選類(lèi)型前要先進(jìn)行判斷是否有值
// 該語(yǔ)法成為可選綁定(如果url有值就解包賦值給tempURL,并且執(zhí)行{})
if let tempUrl = url {
    let request = NSURLRequest(URL: tempUrl)
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容