1. 程式人生 > >swift 可選項和隱式展開可選項

swift 可選項和隱式展開可選項

  1. 概念
    1.1可選項:定義形式
var surveyAnswer: String?

上面定義了一個變數surveyAnswer,它表示一個可選項變數,即聲明瞭一個值為nil的變數。還可以直接賦值,如下:

var surveyAnswer: String? = "Yeah"

(注意:Swift 中的 nil 和Objective-C 中的 nil 不同,在 Objective-C 中 nil 是一個指向不存在物件的指標。在 Swift中, nil 不是指標,他是值缺失的一種特殊型別,任何型別的可選項都可以設定成 nil 而不僅僅是物件型別。非可選項的變數是不能設定為nil)
可選項的取值形式有兩種:強制展開和可選項繫結

//強制展開
//一旦你確定可選中包含值,你可以在可選的名字後面加一個感嘆號 ( ! ) 來獲取值,感嘆號的意思就是說“我知道這個可選項裡邊有值,展開吧。”這就是所謂的可選值的強制展開
if convertedNumber != nil {
    print("convertedNumber has an integer value of \(convertedNumber!).")
}

//可選項繫結,如果包含就把值賦給一個臨時的常量或者變數
if let actualNumber = Int(possibleNumber) {
    print("\'\(possibleNumber)\' has an integer value of \(actualNumber)"
) } else { print("\'\(possibleNumber)\' could not be converted to an integer") }

1.2 隱式展開可選項
有時在一些程式結構中可選項一旦被設定值之後,就會一直擁有值。在這種情況下,就可以去掉檢查的需求,也不必每次訪問的時候都進行展開,因為它可以安全的確認每次訪問的時候都有一個值。這種型別的可選項被定義為隱式展開可選項,通過在宣告的型別後邊新增一個歎號( String! )而非問號( String? ) 來書寫隱式展開可選項。
隱式展開可選項主要被用在 Swift 類的初始化過程中。

//可選項展開
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 //注意:如果你在隱式展開可選項沒有值的時候還嘗試獲取值,會導致執行錯誤。結果和在沒有值的普通可選項後面加一個歎號一樣。

隱式展開方式

//和可選項一樣
if assumedString != nil {
    print(assumedString)
}

//可選項繫結
if let definiteString = assumedString {
    print(definiteString)
}

//與可選項區別:展開後面不需要加"!"

相關推薦

swift 選項展開選項

概念 1.1可選項:定義形式 var surveyAnswer: String? 上面定義了一個變數surveyAnswer,它表示一個可選項變數,即聲明瞭一個值為nil的變數。還可以直接賦值,如下: var surveyAnswer: Stri

Swift中的選型別?選型別!的深入理解

可選型別、隱式可選型別 在Swift中,可選型別其根源是一個列舉型,裡面有None和Some兩種型別。其實所謂的nil就是Optional.None, 非nil就是Optional.Some, 然後會通過Some(T)包裝(wrap)原始值,這也是為什麼在使用Optiona

selenium python 顯等待方法

http load python exe keys users ive 匿名函數 間隙 1 # -*- coding:utf-8 -*- 2 from selenium import webdriver 3 from selenium.webdriver.commo

intentintent

this .text 接收 Coding 南京 聲明 menuitem ret 處理 android其中顯式intent和隱式intent的差別 定義:   Intent定義:Intent是一種在不同組件之間傳遞的請求消息。是應用程序發出的請求和意圖。作為一個完

(三)使用Intent在活動中穿梭:顯Intent

new findview public img 使用 匹配 ted listener style 一、顯式Intent @Override protected void onCreate(Bundle savedInstanceState) {

Scala 中的轉換參數

定義 定義函數 scala 行為 hub 隱式 實現 發現 com 隱式定義是指編譯器為了修正類型錯誤而允許插入到程序中的定義。 舉例: 正常情況下 顯然會報錯,因為 String 類並沒有實現 / 這個方法,我們無法去決定 String 類的行為,這個時候就可以用上 im

強制類型轉換類型轉換

判斷 隱式類型轉換 ber num 隱式 字符串 oat 轉換 進行 強制類型轉換: parseInt() 將字符串強類型制轉換為數字整數類型 parseFloat() 將字符串類型轉換為浮點類型 Number() 只能將純數字的字符轉換為數字

selenium的顯示等待等待區別

點擊 text 異常 exce 自己 設置 font gpo drive 1.selenium的顯示等待原理:顯式等待,就是明確的要等到某個元素的出現或者是某個元素的可點擊等條件,等不到,就一直等,除非在規定的時間之內都沒找到,那麽就跳出Exception.(簡而言之:就是

selenium的顯示等待等待的區別

指定 als 等待時間 可選 cli val 執行 cond BE 什麽是顯示等待和隱式等待?顯示等待就是有條件的等待隱式等待就是無條件的等待隱式等待 當使用了隱式等待執行測試的時候,如果 WebDriver沒有在 DOM中找到元素,將繼續等待,超出設定時間後則拋出找不到元

關於原型原型寫個筆記

如果 tor ons 一句話 函數的原型 struct var 插件 指向 創建一個函數 function f1(){   //。。。。。 } 首先每個函數f1都有一個自帶的原型屬性prototype,這個原型又是一個對象 , 他有自己一個唯一的constructor

基礎知識系列?接口的顯示實現實現

ase 派生類 實現接口 int get 小結 ace pri 報錯 x CLR via C#中的一個小結將標題定為:"13.5 隱式和顯式接口方法實現(幕後發生的事情)"... 直接上代碼 public interface I { i

Android核心技術-day06-01-顯意圖意圖

package com.gaozewen.intent; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppC

js強制轉換轉換

一、 強制轉換 使用String(),Number(),Boolean()函式強制轉換 var str=100; var str1='100'; console.log(typeof str); //number console.log(typeof s

scala高階語法之柯里化(curring) 轉換(implicit)

柯里化(curring)和 隱式轉換(implicit) 柯里化(curring) scala 中 curring 是將一個正常的方法轉換為科裡化的一個過程 把一個引數列表中的多個引數轉換為多個列表 如:①→② ① def m1(a:Int,b:Int)=a+b

Scala基礎:閉包、柯里化、轉換引數

閉包,和js中的閉包一樣,返回值依賴於宣告在函式外部的一個或多個變數,那麼這個函式就是閉包函式。 val i: Int = 20 //函式func的方法體中使用了在func外部定義的變數 那func就是個閉包函式 val func = (x: Int) => x +

《隨筆八》——C#中的 “ 顯轉換 轉換”

目錄 隱式轉換 顯式轉換   隱式轉換 ●  即使兩個變數儲存的資訊相同,使用不同的型別解釋它們時,方式也是不同的。 ● 注意: bool 和 string 沒有隱式轉換; char  儲存的是數值,所以 char 被當作數值型別。

145-顯轉換轉換

隱式轉換:把一個小型別資料賦值給大型別變數時,編譯器自動進行的轉換。   顯式轉換:把一個大型別賦值給一個小型別變數時,需要進行顯式轉換(強制型別轉換),就是加上括號,裡面寫需要轉換的型別。 sbyte myByte = 123; int myInt = myByte; myBy

intent的顯,更多的intent的用法

用intent實現兩個頁面的跳轉,有連個,一個是顯式,一個是隱式 一、顯式 寫了兩個Activity後,點選按鈕,跳轉到另一個頁面 Intent intent=new Intent(MainActivity.this,OrtherActivty.class); startActivi

一、C#4.5語法新特徵(自動屬性型別)

一、自動屬性 在 C# 3.0 及更高版本,當屬性訪問器中不需要任何其他邏輯時,自動實現的屬性會使屬性宣告更加簡潔。 1、寫法比較 2、如何生成Get/Set 1.在每個欄位上方都加上了[CompilerGenerated] 2.欄位的變數名格式為:<屬性名>k_Bac

Oracle顯遊標遊標

遊標的概念:      遊標是SQL的一個記憶體工作區,由系統或使用者以變數的形式定義。遊標的作用就是用於臨時儲存從資料庫中提取的資料塊。在某些情況下,需要把資料從存放在磁碟的表中調到計算機記憶體中進行處理,最後將處理結果顯示