swift中可選值 和 使用的方法示例

2022-09-20 21:39:10 字數 2672 閱讀 6482

optional 可選值

optional是 swift 的一大特色,也是 swift 初學程式設計客棧者最容易困惑的問題。

定義變數時,如果指定該變數是可選的,表示該變數可以有乙個指定類www.cppcns.com型的值,也可以是 nil。

此外,swift的nil也和objective-c有些不一樣,在objective-c中,只有物件才能為nil,而在swift裡,當基礎型別(整形、浮點、布林等)沒有值時,也是nil,而不是乙個初始值,沒有初始值的值,是不能使用的,這就產生了optional型別。定義乙個optional的值很容易,只需要在型別後面加上問號(?)就行了,如:

var str: string?

乙個optional值和非optional值的區別就在於:optional值未經初始化雖然為nil,但普通變數連nil都沒有:

//未被初始化,但是是乙個optional型別,為nil

var str: string?

str //輸出nil

//未被初始化,也不是optional型別

var str2: string

str2 //使用時出錯

關於可選值 !和 ? 使用

先來看乙個栗子

class house klilrj

class person

let xiaowang = person()

//此時xiaowang沒有房子

//如果試圖呼叫xiaowang的house屬性,訪問house的numrooms屬性。過程如下:

//1. 第一種方式: 將house強行解包,用 !。但此時 house 沒有值,所以結果是直接崩潰的。

let numroom = xiaowang.house!.numrooms

//2. 用 if let

if let house = xiaowang.house

//3. 用 ?

if let numrooms = xiaowang.house?.numrooms

現在問題來了

這個涉及到乙個新的知識,叫可空鏈式呼叫。

可空鏈式呼叫。是指當呼叫可選乙個物件的屬性或方法時,可以直接使用問號,此時,不管它的屬性是否可選。最終都返回乙個該可選值。

可空鏈式呼叫

可空鏈式呼叫。是指當呼叫乙個 可選物件 的屬性和方法時。可以先不對該可選物件強行解包。直接使用?此時 可選 這個特徵,一直往後傳遞到 最後要呼叫的屬性和方法,最後返回乙個可選的值的過程。

還舉上面的例子。

if let numrooms = xiaowang.house?.numrooms

此時呼叫的是可選物件 house 的 numrooms屬性。滿足條件:

再舉個栗子

class r程式設計客棧oom

class house

class person

let windows = person().house?.room?.numwindows

if let w = windows

再說說呼叫可選物件的方法

調方法的原理是一樣的。

先說方法。在swift中任何方法都有返回值。沒有返回值,只是說它返回了void。void也是乙個返回值。

如果呼叫可選物件的某個方法。則可選物件的 可選特徵 會自動傳遞給該方法的返回值。

舉個栗子:

class room

}class house

}class person

let person = person()

//下面這一句,house 的可選特徵,傳給了 closedoor() 的返回值 void, 所以實際上返回的是乙個 可選的void型別

person.house?.closedoor()

//所以,判斷方法是否存在,可以判斷是否為 nil

if person.house?.closedoor() != nil

if person.house?.room?.closewindow() != nil

如果你不關心是否呼叫成功,則判斷是否程式設計客棧為nil那一步不是必須的

最後做個總結

來看專案當中的栗子

//先看呼叫屬性

class personcell: uitableviewcell

} override init(style: uitableviewcellstyle, reuseidentifier: string?)

required init?(coder adecoder: nscoder)

}//再看調方法

func tableview(tableview: uitableview, didselectrowatindexpath indexpath: nsindexpath)

//此處, n**igationcontroller是乙個可選屬性,則 pushviewcontroller 方法返回乙個可選的void。n**igationcontroller?.pushviewcontroller(detailvc, animated: true)

} //要想判斷 pushviewcontroller 是否成功,可以做下面的活

if n**igationcontroller?.pushviewcontroller(detailvc, animated: true) != nil

總結本文標題: swift中可選值?和!使用的方法示例

本文位址:

swift中的可選型別

可選型別也是swift語言新新增的物件。主要是為了解決物件變數或常量為空的情況。在前面定義的變數和常量都不能為空。裡面必須要有值。swift中的可選型別則允許變數 常量 中沒有值 被設為nil 要注意的是,swift中的nil和oc中的nil不一樣。前者的nil表示沒有值,而後者的nil表示變數值為...

重新認識Swift中的可選型 Swift2 1

playground noun a place where people can play import uikit swift中nil代表是是另外一種型別,而不像oc那樣,任何物件都能賦值為nil,swift中的nil就是空,什麼都沒有的意思,當乙個變數有可能存在空值的時候,必須顯式的申明為可選型...

Swift 中的值型別和引用型別

值型別和引用型別只在之前的面試過程中碰到過,最近學習過程中,在體驗 swift 的物件導向特性的時候,在 struct 和 class 中再次碰到了這個問題,說一說自己的收穫吧。值型別和引用型別在 oc 裡面理解起來應該更方便。在 oc 中,我們例項化物件的時候有兩種方式。一種是需要在變數名前面加個...