與Objective-C不同,Swift并沒有區(qū)分聲明的.h文件與實(shí)現(xiàn)的.m文件侈离。在OC中如果方法或者變量只在.m文件中出現(xiàn),或者在.h文件中加上@private便可實(shí)現(xiàn)私有化乘盼。
而Swift中所有的變量和方法默認(rèn)都是暴露的,在其他的類中也可以訪問衡创。當(dāng)要將一個變量或者方法私有化時,就需要在對應(yīng)的變量或者方法前面加上 private 修飾符即可婉商。
private var str : String? //在變量前面加行private修飾,實(shí)現(xiàn)私有化
private func demo(){
print("這是一個私有方法,因?yàn)樵诜椒ㄇ懊婕恿藀rivate修飾。")
}
接下來就說一下關(guān)于私有化方法的注意點(diǎn)项钮。
一般來說,一個視圖界面上面的UI控件是需要添加方法去監(jiān)聽用戶的操作的,而這些方法一般都只會在當(dāng)前類調(diào)用,所以這些方法一般需要私有化班眯。
于是,需要如下編寫:
button.addTarget(target: self, action: selector(buttonClick), forControlEvents: UIControlEvents.TouchUpInside)
private func TouchUpInside(){
print("點(diǎn)擊按鈕調(diào)用這個私有方法")
}
然而,當(dāng)程序運(yùn)行后,按鈕一旦被點(diǎn)擊,就會報(bào)錯,錯誤信息的大意是找不到監(jiān)聽按鈕的點(diǎn)擊這個方法。
只要在監(jiān)聽按鈕的私有方法前面加上@objc,便可解決這個問題烁巫。
//方法前面添加了@objc
@objc private func TouchUpInside(){
print("點(diǎn)擊按鈕調(diào)用這個私有方法")
}
究其原因,是由于Swift是靜態(tài)語言,當(dāng)程序運(yùn)行前就已經(jīng)將所有的要運(yùn)行的方法與變量分配好了存儲空間,但是按鈕點(diǎn)擊這種不知道何時會調(diào)用的方法,就無法在這個時候獲得屬于其的存儲空間了署隘。所以在程序運(yùn)行過程中,無法識別到這個方法的存在。
當(dāng)添加@objc修飾之后,意味這個方法還是遵循Objective - C的動態(tài)分配存儲空間規(guī)則(Objective - C是動態(tài)語言)亚隙。所以這樣一來,當(dāng)需要調(diào)用這個監(jiān)聽按鈕點(diǎn)擊方法的時候,便能動態(tài)添加到了內(nèi)存中進(jìn)行運(yùn)行磁餐。