アクセス制限(Access Level)

8872 ワード

Access Levels


privateprivateInternalpublicOpenなどの類✓✓✓✓などのモジュール、プロジェクト✓✓モジュール外✓✓モジュール&修正可能✓
ここは모듈です
コードの上部にインポートするライブラリを宣言すると、
UImit、MapKit、UserNotification等프레임워크privateは専用APIです.
publicは公開APIです
  • private: {}
  • fileprivate
    ViewController.swift
  • internal
    デフォルト
    青いアイコン
  • public
    複数のモジュール
    AppModuleとPodModuleはどちらでもご利用いただけます

    Podについては、他の開発者も追加して使用する必要があるため、公開されていることが確認できます.
    サブクラスおよび書き換え不可
  • open
    サブクラスと上書きを許可する
  • 実習


    global & local varible + access level
    ここで、グローバル変数は
    aPrivateProperty, aFilePrivateProperty, anInternalProperty
    main.swift
    import Foundation
    
    let aClass = AClass()
    
    aClass.methodA()
    aClass.methodB()
    
    print(aClass.anInternalProperty)    // Possible
    AFile.swift
    
    import Foundation
    
    class AClass {
        
        //Global variables, also called class properties.
        
        //같은 클래스
        private var aPrivateProperty = "private property"
        
        //같은 파일
        fileprivate var aFilePrivateProperty = "fileprivate property"
        
        var anInternalProperty = "internal property"
        
        func methodA () {
            
            var aLocalVariable = "local variable"
            
            //Step 1. Try to print aLocalVariable Here - Possible
            print("\(aLocalVariable) printed from methodA in AClass")
            
            //Step 3. Try to print aPrivateProperty Here - Possible
            print("\(aPrivateProperty) printed from methodA in AClass")
            
            //Step 6. Try to print aFilePrivateProperty Here - Possible
            print("\(aFilePrivateProperty) printed from methodA in AClass")
            
            //Step 9. Try to print anInternalProperty Here - Possible
            print("\(anInternalProperty) printed from methodA in AClass")
        }
        
        func methodB () {
            
            //Step 2. Try to print aLocalVariable Here - Impossible
            //print("\(aLocalVariable) printed from methodB in AClass")
            
            //Step 4. Try to print aPrivateProperty Here - Possible
            print("\(aPrivateProperty) printed from methodB in AClass")
            
            print("\(aFilePrivateProperty) printed from methodB in AClass") // Possible
            
            print("\(anInternalProperty) printed from methodB in AClass") // Possible
        }
        
    }
    
    class AnotherClassInTheSameFile {
        
        init() {
            
            //Step 5. Try to print aPrivateProperty Here - Impossible
            //print(aClass.aPrivateProperty)
            
            //Step 7. Try to print aFilePrivateProperty Here - Possible
            print(aClass.aFilePrivateProperty)
        }
    }
    AnotherFile.swift
    import Foundation
    
    class AnotherClassInAnotherFile {
        
        init() {
            
            //Step 8. Try to print aFilePrivateProperty Here - Impossible
            //print(aClass.aFilePrivateProperty)
            
            //Step 10. Try to print anInternalProperty Here - Possible
            print(aClass.anInternalProperty)
        }
        
    }