Swift 可選類型的使用含代碼

Swift 可選類型的使用

可選類型是Swift編碼中的基本部分。愛掏網 - it200.com可選類型的作用是將良好的代碼與不良的代碼分開,并避免崩潰。愛掏網 - it200.com每種編程語言都有一些預防措施來避免崩潰。愛掏網 - it200.com在這方面,Swift更加實用,可選類型可以使你的代碼無崩潰。愛掏網 - it200.com ** .

enum Optional 

可選類型 是在使用可選值時使用的,即使您從未輸入過Optional這個單詞。愛掏網 - it200.comSwift的類型系統通常會顯示包裝類型的名稱,然后跟一個問號(?),而不是顯示完整的類型名稱。愛掏網 - it200.com

例如 ,如果一個變量的類型是 Int? ,它與寫作Optional是相同的,只是另一種簡潔的寫法,以使代碼易于閱讀和簡化。愛掏網 - it200.com

請看以下示例。愛掏網 - it200.com

在下面的代碼示例中,shortForm和longForm的類型是相同的:

let shortForm: Int? = Int("143")
Or
let longForm: Optional = Int("143") 
//Both are same 

Optional(可選類型)可以代表 沒有任何值有值 的情況。愛掏網 - it200.com可選類型允許將 nil 作為沒有值的表示。愛掏網 - it200.com可選類型是一個泛型枚舉,有兩個case:

  • Optional.none :等同于nil字面量。愛掏網 - it200.com
  • Optional.some(Wrapped) :它存儲了一個包裝后的值。愛掏網 - it200.com

示例

let number: Int? = Optional.some(143)
let noNumber: Int? = Optional.none
print(noNumber == nil)
// Prints "true"

輸出:

true

以上程序中的問號(?)表示它是一個可選變量。愛掏網 - it200.com如果在變量聲明的末尾看到一個問號,那么它絕對是可選的,它可能包含一個值,也可能沒有。愛掏網 - it200.com所以,在程序的某個部分,你不知道變量是否有值,那么標記它為可選。愛掏網 - it200.com

現在,看看這個示例:

這里我們試圖打印變量’numberOfStudents’的值。愛掏網 - it200.com

var numberOfStudents : Int?
print(numberOfStudents!)

在這里,變量末尾的感嘆號(?。┯糜诮獍怠?b class="xhide">愛掏網 - it200.com但是,如果嘗試執行代碼,代碼將崩潰。愛掏網 - it200.com那是因為你強制對一個沒有值的可選變量進行解包。愛掏網 - it200.com如果變量中沒有值,程序將崩潰。愛掏網 - it200.com

為變量設置一個值

如果在強制解包值之前給變量設置一個值,代碼就不會崩潰,但這不是一個良好的編碼實踐,是對可選變量的濫用。愛掏網 - it200.com

var numberOfStudents : Int?
numberOfStudents = 30
print(numberOfStudents!)

輸出:

30

在強制解包可選項之前,您可以進行nil檢查。愛掏網 - it200.com

示例:

var numberOfStudents : Int?
if numberOfStudents != nil {
print(numberOfStudents!)
}

現在,您的程序不會崩潰,因為您在對可選變量進行nil檢查之后才進行強制解包。愛掏網 - it200.com

var numberOfStudents : Int?
if let studentCount = numberOfStudents {
print(studentCount) // It is same as print(numberOfStudents!)
}

上述方法將檢查可選變量’numberOfStudents’是否包含某個值。愛掏網 - it200.com如果存在,則將其復制到一個稱為studentCount的常量中,然后只有代碼塊才會執行。愛掏網 - it200.com

強制解包

當將變量定義為可選類型時,要從該變量中獲取值,就必須對其進行解包。愛掏網 - it200.com強制解包是在變量末尾加上一個感嘆號的過程。愛掏網 - it200.com

讓我們看一個示例來說明清楚。愛掏網 - it200.com

示例:(在應用強制解包之前)

var userString:String?
userString = "Hello World"
if userString != nil {
   print(userString)
} else {
   print("userString has nil value")
}

輸出: 當您執行上述代碼時,它將給出以下輸出:

Optional("Hello World")

示例:(應用解包后)

現在,我們應用解包以獲取變量的正確值。愛掏網 - it200.com

 var userString:String?
userString = "Hello World"
if userString != nil {
   print(userString!)
} else {
   print("userString has nil value")
}

輸出:

Hello World

自動展開

自動展開提供了一種方式,其中可選變量使用感嘆號而不是問號聲明。愛掏網 - it200.com通過這種方式,變量將自動展開,您無需在變量末尾使用任何進一步的感嘆號來獲取分配的值。愛掏網 - it200.com

讓我們看一個示例。愛掏網 - it200.com

示例

var userString:String!
userString = "Hello World"
if userString != nil {
   print(userString)
} else {
   print("userString has nil value")
}

輸出:

Hello World

Swift可選綁定

可選綁定用于判斷可選類型是否包含值,并在有值的情況下,將該值作為臨時常量或變量。愛掏網 - it200.com您可以使用任何可選綁定控制結構,包括 if let、guard let 等。愛掏網 - it200.com

讓我們舉個示例來看看 if 語句中的可選綁定:

示例

var userString:String?
userString = "Hello world"
if let myString = userString {
   print("The value of my string is - \(myString)")
} else {
   print("My string does not have a value")
}

輸出:

The value of my string is - Hello world

聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
發表評論
更多 網友評論0 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 欧美人与牲动交xxxxbbbb| 51视频精品全部免费最新| 美女极度色诱视频国产| 日本免费人成视频播放| 国产午夜a理论毛片在线影院| 五月婷婷中文字幕| 97se亚洲国产综合自在线| 激性欧美激情在线播放16页| 大佬的365天第三季完整视频在线观看| 免费**的网址| a级毛片免费高清视频| 男人j放进女人p全黄| 大伊香蕉在线精品视频人碰人 | 亚洲最大av网站在线观看| 8050午夜网| 杨晨晨脱得一二净无内裤全身 | 日本成人免费网站| 国产一级爱做c片免费昨晚你| 久久99国产精品尤物| 老板在办公室里揉护士的胸视频| 成人国产精品一级毛片视频| 公交车忘穿内裤被挺进小说白| www.av小四郎.com| 波多野结衣亚洲一区| 国产精品拍拍拍| 久久精品天天中文字幕人妻| 野花日本免费观看高清电影8| 新梅瓶1一5集在线观看| 成人午夜兔费观看网站| 再深点灬舒服灬太大了男小| A级国产乱理论片在线观看| 欧美激情性xxxxx| 国产欧美曰韩一区二区三区 | 欧美乱人伦视频| 国产在线国偷精品免费看| 中文字幕在线看视频一区二区三区| 精品国产一区二区三区AV性色| 在线视频网站WWW色| 亚洲中文字幕久久精品无码va| 高清免费a级在线观看国产| 成人免费视频软件网站|