在swift**會經常看到定義屬性或方法引數時型別後面會緊跟乙個感嘆號(!
)或問號(?
), 剛開始接觸swift的童鞋就可能不太明白之代表什麼意思,一頭霧水,開始凌亂了。
本文將帶你了解感嘆號( ! )與問號( ? )之謎,首先問號(?
)是可選型別,是用來處理值可能缺失的情況,也就是沒有值的情況(也就是oc中null); 感嘆號(!
)就是與之相反的, 就是一定有值(非可選型別),不存在空值的情況(oc中null)。
下面根據不同使用場景來進一步了解感嘆號( ! )與問號( ? )之謎
類的屬性
class
myclass
在1. 下面**,在執行時初始化乙個myclass
定義了2個屬性:value
和optionalvalue
,其中optionalvalue
為可選型別;這表示value
在使用之前一定是賦了值的(一定有值),optionalvalue
則有可能值缺失。下面先來看看幾個**片段來深入了解感嘆號( ! )與問號( ? )之謎
myclass
例項會發生什麼呢?
class
myclass
}
2. 下面**,在執行時初始化乙個value
是非可選型別,必須要有值,從**中看出value
從賦值過。另外建構函式裡的問號( ? )是指可選解析(弱解析),並不是指可選型別,這裡要注意了
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這很容易理解,因...