Swift 3.0 的 open,public,internal,fi
open
open 修飾的 class 在 Module 內部和外部都可以被訪問和繼承
open 修飾的 func 在 Module 內部和外部都可以被訪問和過載(override)
Public
public 修飾的 class 在 Module 內部可以訪問和繼承,在外部只能訪問
public 修飾的 func 在 Module 內部可以被訪問和過載(override),在外部只能訪問
Final
final 修飾的 class 任何地方都不能不能被繼承
final 修飾的 func 任何地方都不能被 Override
總結:
現在的訪問許可權則依次為:open,public,internal,fileprivate,private。
下面是例子:
ModuleA.framework 中新建一個類ModuleA.swift
import Foundation/// final的含義保持不變public final class FinalClass { }// 這個類在ModuleA的範圍外是不能被繼承的,只能被訪問public class PublicClass { public func testPublic() {} // 這是錯誤的寫法,因為class已經不能被繼承, // 所以他的方法的訪問許可權不能大於類的訪問許可權 open func testOpen() {} // final的含義保持不變 public final func testPublicFinal() {} }// 在ModuleA的範圍外可以被繼承open class OpenClass { // 這個屬性在ModuleA的範圍外不能被override public var size : Int = 0 // 這個方法在ModuleA的範圍外不能被override public func testPublic() {} // 這個方法在任何地方都可以被override open func testOpen() {} ///final的含義保持不變 public final func testPublicFinal() {} }
在 ModuleB.framework 中新建一個類:ModuleB.swift
並且把 ModuleA.framework import 進來
import Foundationimport ModuleA// 這個寫法是錯誤的,編譯會失敗,類訪問許可權標記的是public,只能被訪問不能被繼承class SubA : PublicClass { }// 這樣寫法可以透過,Class訪問許可權為 `open`.class SubB : OpenClass { // 這樣寫也會編譯失敗,因為這個方法許可權為public,不是`open'. override func testPublic() { } // 這個方法因為在SubclassableParentClass中標記為open,所以可以這樣寫 // 這裡不需要再宣告為open,因為這個類是internal的 override func testOpen() { } } open class SubC : OpenClass { // 這種寫法會編譯失敗 override func testPublicFinal() { } // 正確的寫法,方法也需要標記為open open override func testOpen() { } } open class SubE : OpenClass { // 也可以顯式的指出這個方法不能再被override public final override func testOpen() { } }
作者:midmirror
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2144/viewspace-2820147/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Swift中private、fileprivate、public、open和internal許可權程式碼證明詳解Swift
- C#中public、private、protected、internal、protected internal (轉載)C#
- Oracle RAC中的Public IP, VIP和Internal IP,SCANOracle
- Swift3.0 - 遇到的坑Swift
- Android 3.0 DELETE_FAILED_INTERNAL_ERRORAndroiddeleteAIError
- swift3.0後的for in寫法Swift
- 搶先看Swift3.0Swift
- Swift3.0 CurryingSwift
- Swift3.0 Delegate和Block的實現SwiftBloC
- Swift2.3升級到Swift3.0小記Swift
- 從Object-C -> Swift3.0ObjectSwift
- Swift3.0整合極光推送Swift
- Swift3.0 -- 建構函式Swift函式
- Swift 3必看:新的訪問控制fileprivate和openSwift
- 在swift3.0中列印物件的地址資訊Swift物件
- iOS Swift3.0 UIView動畫詳解iOSSwiftUIView動畫
- swift3.0與OC的互動注意事項Swift
- Swift3.0 已出坑-適配 iOS10,專案遷移 Swift3.0 問題總結SwiftiOS
- Swift3.0語言教程使用URL字串Swift字串
- Swift3.0語言教程組合字串Swift字串
- fir.im Weekly - Swift 3.0 的遷移適配指南Swift
- Swift3.0 呼叫C函式-_silen_nameSwift函式
- Swift3.0語言教程使用路徑字串Swift字串
- Swift3.0語言教程替換子字串Swift字串
- Swift3.0語言教程獲取C字串Swift字串
- Swift3.0 -- 閉包的迴圈引用與OC的對比Swift
- 記錄專案中Swift3.0的語法變化Swift
- Swift3.0語言教程獲得一個公共的字首Swift
- Oracle中的publicOracle
- Check the existence of public synonyms Remove the public synonymsREM
- Swift3.0語言教程獲取字串長度Swift字串
- Swift3.0語言教程比較、判斷字串Swift字串
- Swift3.0語言教程字串大小寫轉化Swift字串
- Swift3.0 -- didSet(OC中重寫setter方法)Swift
- Swift 3.0之後實現Dispatch once擴充套件Swift套件
- swift 3.0 閉包,專案使用例子,結合GCDSwiftGC
- iOS swift2.3 遷移到3.0 遇到的一些問題iOSSwift
- Swift3.0語言教程字串與檔案的資料轉換Swift字串