Swift中的感嘆號 與問號 之謎

2022-08-27 02:15:12 字數 1360 閱讀 9997

在swift**會經常看到定義屬性或方法引數時型別後面會緊跟乙個感嘆號(!)或問號(?), 剛開始接觸swift的童鞋就可能不太明白之代表什麼意思,一頭霧水,開始凌亂了。

本文將帶你了解感嘆號( ! )與問號( ? )之謎,首先問號(?)是可選型別,是用來處理值可能缺失的情況,也就是沒有值的情況(也就是oc中null); 感嘆號(!)就是與之相反的, 就是一定有值(非可選型別),不存在空值的情況(oc中null)。

下面根據不同使用場景來進一步了解感嘆號( ! )與問號( ? )之謎

類的屬性

class

myclass

myclass定義了2個屬性:valueoptionalvalue,其中optionalvalue為可選型別;這表示value在使用之前一定是賦了值的(一定有值),optionalvalue則有可能值缺失。下面先來看看幾個**片段來深入了解感嘆號( ! )與問號( ? )之謎

1. 下面**,在執行時初始化乙個myclass例項會發生什麼呢?

class

myclass

}

value是非可選型別,必須要有值,從**中看出value從賦值過。另外建構函式裡的問號( ? )是指可選解析(弱解析),並不是指可選型別,這裡要注意了

2. 下面**,在執行時初始化乙個myclass例項會發生什麼呢?

class

myclass

}

大家肯定奇怪了明明value已經賦值了,為什麼還會崩潰,問題出在optionalvalue屬性,不知道大家注意了沒有,此**的建構函式中optionalvalue後面是感嘆號( ! ),而**片段1的建構函式中optionalvalue後面是問號( ? )。這裡的感嘆號( ! )是指強解析,你也可以理解為強制取值,但是optionalvalue至定義後從未賦值過,也就是沒有值(特別注意:可選值不是值),自然也就和**片段1報一樣的錯

swift 中的問號跟感嘆號

變數在使用過程中可能存在空值,則需要用?標記,否則賦空值會報錯?1 2varmustnonilvalue string swift varcannilvalue string?nil 感嘆號和問號是配套使用的,用問號標記的變數,在呼叫方法的時候,需要新增感嘆號,意義是,如果變數是空值,則感嘆號後面的...

function與感嘆號

如果在function之前加上感嘆號 會怎麼樣?比如下面的 function true 在控制台執行後得到的值時true,為什麼是true這很容易理解,因為這個匿名函式沒有返回值,預設返回的就是undefined,求反的結果很自然的就是true。所以問題並不在於結果值,而是在於,為什麼求反操作能夠讓...

function與感嘆號

最近有空可以讓我靜下心來看看各種 function與感嘆號的頻繁出現,讓我回想起2個月前我回杭州最後參加團隊會議的時候,西子劍影丟擲的一樣的問題 如果在function之前加上感嘆號 會怎麼樣?比如下面的 function true 在控制台執行後得到的值時true,為什麼是true這很容易理解,因...