Swift 可選類型的使用
可選類型是Swift編碼中的基本部分。愛掏網(wǎng) - it200.com可選類型的作用是將良好的代碼與不良的代碼分開,并避免崩潰。愛掏網(wǎng) - it200.com每種編程語言都有一些預(yù)防措施來避免崩潰。愛掏網(wǎng) - it200.com在這方面,Swift更加實用,可選類型可以使你的代碼無崩潰。愛掏網(wǎng) - it200.com ** .
enum Optional
可選類型 是在使用可選值時使用的,即使您從未輸入過Optional這個單詞。愛掏網(wǎng) - it200.comSwift的類型系統(tǒng)通常會顯示包裝類型的名稱,然后跟一個問號(?),而不是顯示完整的類型名稱。愛掏網(wǎng) - it200.com
例如 ,如果一個變量的類型是 Int? ,它與寫作Optional是相同的,只是另一種簡潔的寫法,以使代碼易于閱讀和簡化。愛掏網(wǎng) - it200.com
請看以下示例。愛掏網(wǎng) - it200.com
在下面的代碼示例中,shortForm和longForm的類型是相同的:
let shortForm: Int? = Int("143")
Or
let longForm: Optional = Int("143")
//Both are same
Optional(可選類型)可以代表 沒有任何值 或 有值 的情況。愛掏網(wǎng) - it200.com可選類型允許將 nil 作為沒有值的表示。愛掏網(wǎng) - it200.com可選類型是一個泛型枚舉,有兩個case:
- Optional.none :等同于nil字面量。愛掏網(wǎng) - it200.com
- Optional.some(Wrapped) :它存儲了一個包裝后的值。愛掏網(wǎng) - it200.com
示例
let number: Int? = Optional.some(143)
let noNumber: Int? = Optional.none
print(noNumber == nil)
// Prints "true"
輸出:
true
以上程序中的問號(?)表示它是一個可選變量。愛掏網(wǎng) - it200.com如果在變量聲明的末尾看到一個問號,那么它絕對是可選的,它可能包含一個值,也可能沒有。愛掏網(wǎng) - it200.com所以,在程序的某個部分,你不知道變量是否有值,那么標(biāo)記它為可選。愛掏網(wǎng) - it200.com
現(xiàn)在,看看這個示例:
這里我們試圖打印變量’numberOfStudents’的值。愛掏網(wǎng) - it200.com
var numberOfStudents : Int?
print(numberOfStudents!)
在這里,變量末尾的感嘆號(!)用于解包值。愛掏網(wǎng) - it200.com但是,如果嘗試執(zhí)行代碼,代碼將崩潰。愛掏網(wǎng) - it200.com那是因為你強制對一個沒有值的可選變量進行解包。愛掏網(wǎng) - it200.com如果變量中沒有值,程序?qū)⒈罎ⅰ?b class="xhide">愛掏網(wǎng) - it200.com
為變量設(shè)置一個值
如果在強制解包值之前給變量設(shè)置一個值,代碼就不會崩潰,但這不是一個良好的編碼實踐,是對可選變量的濫用。愛掏網(wǎng) - it200.com
var numberOfStudents : Int?
numberOfStudents = 30
print(numberOfStudents!)
輸出:
30
在強制解包可選項之前,您可以進行nil檢查。愛掏網(wǎng) - it200.com
示例:
var numberOfStudents : Int?
if numberOfStudents != nil {
print(numberOfStudents!)
}
現(xiàn)在,您的程序不會崩潰,因為您在對可選變量進行nil檢查之后才進行強制解包。愛掏網(wǎng) - it200.com
var numberOfStudents : Int?
if let studentCount = numberOfStudents {
print(studentCount) // It is same as print(numberOfStudents!)
}
上述方法將檢查可選變量’numberOfStudents’是否包含某個值。愛掏網(wǎng) - it200.com如果存在,則將其復(fù)制到一個稱為studentCount的常量中,然后只有代碼塊才會執(zhí)行。愛掏網(wǎng) - it200.com
強制解包
當(dāng)將變量定義為可選類型時,要從該變量中獲取值,就必須對其進行解包。愛掏網(wǎng) - it200.com強制解包是在變量末尾加上一個感嘆號的過程。愛掏網(wǎng) - it200.com
讓我們看一個示例來說明清楚。愛掏網(wǎng) - it200.com
示例:(在應(yīng)用強制解包之前)
var userString:String?
userString = "Hello World"
if userString != nil {
print(userString)
} else {
print("userString has nil value")
}
輸出: 當(dāng)您執(zhí)行上述代碼時,它將給出以下輸出:
Optional("Hello World")
示例:(應(yīng)用解包后)
現(xiàn)在,我們應(yīng)用解包以獲取變量的正確值。愛掏網(wǎng) - it200.com
var userString:String?
userString = "Hello World"
if userString != nil {
print(userString!)
} else {
print("userString has nil value")
}
輸出:
Hello World
自動展開
自動展開提供了一種方式,其中可選變量使用感嘆號而不是問號聲明。愛掏網(wǎng) - it200.com通過這種方式,變量將自動展開,您無需在變量末尾使用任何進一步的感嘆號來獲取分配的值。愛掏網(wǎng) - it200.com
讓我們看一個示例。愛掏網(wǎng) - it200.com
示例
var userString:String!
userString = "Hello World"
if userString != nil {
print(userString)
} else {
print("userString has nil value")
}
輸出:
Hello World
Swift可選綁定
可選綁定用于判斷可選類型是否包含值,并在有值的情況下,將該值作為臨時常量或變量。愛掏網(wǎng) - it200.com您可以使用任何可選綁定控制結(jié)構(gòu),包括 if let、guard let 等。愛掏網(wǎng) - 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