當前位置:
首頁 > 知識 > Swift 可選(Optionals)類型

Swift 可選(Optionals)類型


Swift 可選(Optionals)類型

Swift 的可選(Optional)類型,用於處理值缺失的情況。可選表示"那兒有一個值,並且它等於 x "或者"那兒沒有值"。

Swfit語言定義後綴?作為命名類型Optional的簡寫,換句話說,以下兩種聲明是相等的:

var optionalInteger: Int?

在這兩種情況下,變數 optionalInteger 都是可選整數類型。注意,在類型和 ?之間沒有空格。

Optional 是一個含有兩種情況的枚舉,None 和 Some(T),用來表示可能有或可能沒有值。任何類型都可以明確聲明為(或者隱式轉換)可選類型。當聲明一個可選類型的時候,要確保用括弧給 ? 操作符一個合適的範圍。例如,聲明可選整數數組,應該寫成 (Int[])? 寫成 Int[]? 會報錯。

Swift 可選(Optionals)類型

當你聲明一個可選變數或者可選屬性的時候沒有提供初始值,它的值會默認為 nil。

可選項遵照 LogicValue 協議,因此可以出現在布爾環境中。在這種情況下,如果可選類型T?包含類型為T的任何值(也就是說它的值是 Optional.Some(T) ),這個可選類型等於 true,反之為 false。

如果一個可選類型的實例包含一個值,你可以用後綴操作符 !來訪問這個值,如下所示:

optionalInteger = 42

使用操作符!去獲取值為nil的可選變數會有運行時錯誤。

你可以用可選鏈接和可選綁定選擇性執行可選表達式上的操作。如果值為nil,任何操作都不會執行,也不會有運行報錯。

讓我們來詳細看下以下實例來了解 Swift 中可選類型的應用:

import Cocoa

以上程序執行結果為:

字元串為 nil

可選類型類似於Objective-C中指針的nil值,但是nil只對類(class)有用,而可選類型對所有的類型都可用,並且更安全。



Swift 可選(Optionals)類型

強制解析

當你確定可選類型確實包含值之後,你可以在可選的名字後面加一個感嘆號(!)來獲取值。這個感嘆號表示"我知道這個可選有值,請使用它。"這被稱為可選值的強制解析(forced unwrapping)。

實例如下:

import Cocoa

以上程序執行結果為:

Optional("Hello, Swift!")

強制解析可選值,使用感嘆號(!):

import Cocoa

以上程序執行結果為:

Hello, Swift!

注意:

使用!來獲取一個不存在的可選值會導致運行時錯誤。使用!來強制解析值之前,一定要確定可選包含一個非nil的值。


Swift 可選(Optionals)類型

自動解析

你可以在聲明可選變數時使用感嘆號(!)替換問號(?)。這樣可選變數在使用時就不需要再加一個感嘆號(!)來獲取值,它會自動解析。

實例如下:

import Cocoa

以上程序執行結果為:

Hello, Swift!


可選綁定

使用可選綁定(optional binding)來判斷可選類型是否包含值,如果包含就把值賦給一個臨時常量或者變數。可選綁定可以用在if和while語句中來對可選類型的值進行判斷並把值賦給一個常量或者變數。

像下面這樣在if語句中寫一個可選綁定:

if let constantName = someOptional {

讓我們來看下一個簡單的可選綁定實例:

import Cocoa

以上程序執行結果為:

你的字元串值為 - Hello, Swift!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

Swift 基本語法
Swift 變數
Web 品質-可讀性
Web Quality-無障礙(WAI)

TAG:程序員小新人學習 |

您可能感興趣

TypeScript基礎之高級類型的可辨識聯合(Discriminated Unions)
python中list,array,mat,tuple大小及類型
「Good idea/solution」 類型作文審題
python基礎之變數類型number(math模塊)
類型轉換運算符 運算符重載 operator new operator delete
Hibernate 映射枚舉Enum 類型的屬性
Google出品的Python代碼靜態類型分析器:Pytype
「Python」Chapter1 變數和簡單數據類型
SM、jyp、yg、cube、ymc等公司類型——其中big hit最霸氣
solidity之地址類型
Chrome 66 新特性:CSS 類型對象模型,非同步剪貼板 API,AudioWorklet,等
Pyright:微軟提供的Python靜態類型檢查器
澳大利亞 Bunjil Place,高難度木曲線營造類型場所/fjmt
Shopify賬號有哪些類型?Shopify賬號類型&賬號許可權
opencv Mat類型和BYTE*指針類型互轉
Facebook主頁成效分析:帖子有什麼作用?Facebook帖子類型&作用
由光環新網運營的 AWS 中國區域現已推出 Amazon RDS for Oracle 支持 X1 實例類型
Redis 數據類型
Swift 類型轉換
Kotlin 基本數據類型