Swift(六 访问权限)

作者: DSA碼侬 | 来源:发表于2017-08-29 16:33 被阅读124次

访问修饰符有:open、public、internal、fileprivate、private
访问修饰符可以修饰面向对象的类型,以及变量常量下标元组函数属性等“实体”。

模块:
一个应用程序包(Application可以执行,包含很多Swift文件以及其他文件)或者 一个框架(不可执行文件,Swift文件以及其他文件的集合) import引用
源文件:
.swift文件,编译之后被包含在应用程序包或者框架中

1、open
任何open实体,无论在自己模块,还是其他模块都可以被访问,open有个使用说明:only classes and overridable class members can be declared 'open'--即open只能适用于类class
2、public
约等于open,在同一模块中open等于public,在不同模块时,public所声明的类不能被继承,public所声明的属性和方法不能被重写(override)
3、internal
默认访问权限。只能在自己模块中被访问
4、fileprivate
只能在当前文件中被访问
5、private
只能在类型内部被访问

统一性原则
1、如果一个类型(包括类、结构体、枚举),定义为internal或者private,那么类型声明的变量或者常量(实例化)不能使用public访问级别。

   private class Employee{

          var no: Int = 0
          var name: String = ""
          var job: String?
          var salary: Double = 0
          var dept: Department?
}

   internal struct Department{

           var no: Int = 0
           var name: String = ""
}

 public let emp = Employee()  // fileprivate\private是可以的
 public var dept = Department()
 // 编译报错:Playground execution failed: error: MyPlayground.playground:12:12: error: constant cannot be declared public because its type 'Employee' uses a private type
 public let emp = Employee()
            ^

error: MyPlayground.playground:13:12: error: variable cannot be declared public because its type 'Department' uses an internal type
public var dept = Department()
           ^

2、函数的访问权限级别不能高于它的参数和返回值类型(类、结构体、枚举)的访问级别

   class Employee{

      var no: Int = 0
      var name: String = ""
      var job: String?
      var salary: Double = 0
     var dept: Department?
  }
struct Department{
    var no: Int = 0
    var name: String = ""
  }

public func getEmpDept(emp: Employee)->Department?{
          return emp.dept
}

//  编译失败:Playground execution failed: error: MyPlayground.playground:11:14: error: function cannot be declared public because its parameter uses an internal type
public func getEmpDept(emp: Employee)->Department?{
            ^               ~~~~~~~~
 会有函数可以被任何人访问,而他的参数和返回类型不可以访问的矛盾情况

设计原则
1、如果本应用程序访问,默认的访问级别就可以。
2、如果是框架的开发,让别人使用的就public,不让别人看到的就设定为internal private

元组类型的访问级别遵循元组中字段最低级的访问级别

枚举类型的访问级别
枚举类型的访问级别继承自该枚举,因此我们不能为枚举中的成员指定访问级别。

相关文章

  • Swift(六 访问权限)

    访问修饰符有:open、public、internal、fileprivate、private访问修饰符可以修饰面...

  • 访问权限总结

    swift访问权限 按照访问权限的大小 :open > internal > fileprivate > priv...

  • Swift访问权限:open、public、internal、f

    Swift3.0中访问权限顺序 在Swift3.0中,权限的访问顺序为:open> public > intera...

  • 第二十三节 Swift 的访问控制

    通过访问控制可以限定其它模块的代码对你代码的访问权限。 Swift 常用三种访问权限: Public:可以访问当前...

  • 【Swift】访问权限

    【Swift】 一、 1、在swift中一个工程(或者一个第三方framework、target)相当于一个mou...

  • swift 访问权限

    import UIKit /* 1>internal :内部的, 1.默认情况下所有的类的属性&方法的访问权限都是...

  • swift权限访问

    1.访问权限 public:Framework 是可以被任何人使用的,你可以将其设置为 public 级别 int...

  • Swift 访问权限

    private private访问级别所修饰的属性或者方法只能在当前类里访问。 fileprivate filep...

  • Swift 访问权限

    open 在 Module 内部和外部都可以被访问和继承、重写 public 在 Module 内部可以被访问和继...

  • Swift访问权限

    访问修饰符有:open、public、internal、fileprivate、private1、open任何op...

网友评论

    本文标题:Swift(六 访问权限)

    本文链接:https://www.haomeiwen.com/subject/xoairxtx.html