淺談swift 4.0中private所發(fā)生的變化
前言
當Swift首次引入訪問級別時,對此進行了一些混淆和不解。雖然開發(fā)人員對于添加對Swift編程語言的訪問控制感到興奮,但是private關(guān)鍵字的行為與其他編程語言的行為不同。
之前在swift 3.0的時候,如果把聲明的變量或方法加上private前綴,那么它就只能在當前的class里使用,extension 中也不能使用。改成fileprivate,卻又可以在其他類中實例化后使用,屬性的作用域就會更大,可能會不小心造成屬性的濫用。
所以在Swift 4 中,private 的屬性的作用域擴大到了 extension 中,并且被限定在了 struct 和 extension 內(nèi)部,這樣就不需要再改成 fileprivate 了。
Swift4.0到底有哪些新改變呢?
- 字符串String類型更加人性化,多行字符串文字,支持Range,也算集合類型
- 改進的private的訪問權(quán)限,私有訪問修飾符
- 更智能更安全的Key Value Coding 鍵值編碼
- 詞典和集合
- 歸檔和序列化
- 單面范圍
- 通用下標
- MutableCollection.swapAt( __ : _ _ )
- 相關(guān)類型限制
- 類和協(xié)議存在
- 限制@objc推論
下面進行本文的正文介紹:
上代碼
class ViewController: UIViewController { var test = "" private var test1 = "" fileprivate var test2 = "" override func viewDidLoad() { super.viewDidLoad() testIt() // 之前會報錯 需要修改為fileprivate } func testForNormal(){ } private func testForPrivate(){ } fileprivate func testForfileprivate(){ } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } extension ViewController { private func testIt(){ testForPrivate() /// swift 4.0 可以訪問 之前不行 } } class other { let a = ViewController() func lalal(){ _ = a.test /// Normal _ = a.test2 /// fileprivate a.testForNormal() /// Normal a.testForfileprivate() /// fileprivate a.testForPrivate() /// 報錯 'testForPrivate' is inaccessible due to 'private' protection level } }
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
swift實現(xiàn)自動輪播圖效果(UIScrollView+UIPageControl+Timer)
這篇文章主要為大家詳細介紹了swift實現(xiàn)自動輪播圖效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09Swift開發(fā)之UITableView狀態(tài)切換效果
這篇文章主要介紹了Swift開發(fā)之UITableView狀態(tài)切換效果的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-08-08Swift下使用UICollectionView 實現(xiàn)長按拖拽功能
拖拽排序是新聞類的App可以說是必有的交互設(shè)計,如今日頭條,網(wǎng)易新聞等。這篇文章主要介紹了Swift下使用UICollectionView 長按拖拽功能,需要的朋友可以參考下2017-03-03