前言
當Swift首次引入訪問級別時,對此進行了一些混淆和不解。雖然開發人員對于添加對Swift編程語言的訪問控制感到興奮,但是private關鍵字的行為與其他編程語言的行為不同。
之前在swift/36854.html">swift 3.0的時候,如果把聲明的變量或方法加上private前綴,那么它就只能在當前的class里使用,extension 中也不能使用。改成fileprivate,卻又可以在其他類中實例化后使用,屬性的作用域就會更大,可能會不小心造成屬性的濫用。
所以在Swift 4 中,private 的屬性的作用域擴大到了 extension 中,并且被限定在了 struct 和 extension 內部,這樣就不需要再改成 fileprivate 了。
Swift4.0到底有哪些新改變呢?
下面進行本文的正文介紹:
上代碼
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 } }
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。
新聞熱點
疑難解答