Swift@H_404_1@@H_404_1@提供了@H_404_1@3@H_404_1@@H_404_1@种不同访问级别,对应的访问修饰符为:@H_404_1@@H_404_1@public@H_404_1@@H_404_1@、@H_404_1@@H_404_1@internal@H_404_1@@H_404_1@和@H_404_1@@H_404_1@private@H_404_1@@H_404_1@。这些访问修饰符可以修饰类、结构体、枚举等面向对象的类型,还可以修饰变量、常量、下标、元组、函数、属性等内容。@H_404_1@@H_404_1@
@H_404_1@public@H_404_1@@H_404_1@。可以访问自己模块中的任何@H_404_1@public@H_404_1@@H_404_1@实体。如果使用@H_404_1@import@H_404_1@@H_404_1@语句引入其他模块,我们可以访问其他模块中的@H_404_1@public@H_404_1@@H_404_1@实体。@H_404_1@
internal@H_404_1@@H_404_1@。只能访问自己模块的任何@H_404_1@internal@H_404_1@@H_404_1@实体,不能访问其他模块中的@H_404_1@internal@H_404_1@@H_404_1@实体。@H_404_1@internal@H_404_1@@H_404_1@可以省略,换句话说,默认访问限定是@H_404_1@internal@H_404_1@@H_404_1@。@H_404_1@
- private@H_404_1@@H_404_1@。只能在当前源文件中使用的实体,称为私有实体。使用@H_404_1@private@H_404_1@@H_404_1@修饰,可以用作隐藏某些功能的实现细节。@H_404_1@
使用访问修饰符的示例代码如下:@H_404_1@@H_404_1@
@H_404_1@ @H_404_1@public class PublicClass {} internal class InternalClass {} private class PrivateClass {} public var intPublicVariable = 0 let intInternalConstant = 0 private func intPrivateFunction() {}
@H_404_1@ @H_404_1@
由于中@H_404_1@Swift@H_404_1@@H_404_1@中访问限定符能够修饰的实体很多,使用起来比较繁琐,下面我们给出一些最佳实践。@H_404_1@@H_404_1@
@H_404_1@1. @H_404_1@@H_404_1@统一性原则@H_404_1@@H_404_1@
@H_404_1@- 原则@H_404_1@1@H_404_1@:如果一个类型(类、结构体、枚举)定义为@H_404_1@internal@H_404_1@@H_404_1@或@H_404_1@private@H_404_1@@H_404_1@,那么类型声明的变量或常量不能使用@H_404_1@public@H_404_1@@H_404_1@访问级别。因为@H_404_1@public@H_404_1@@H_404_1@的变量或常量可以被任何人访问,而@H_404_1@internal@H_404_1@@H_404_1@或@H_404_1@private@H_404_1@@H_404_1@的类型不可以。@H_404_1@
- 原则@H_404_1@2@H_404_1@:函数的访问级别不能高于它的参数和返回类型(类、结构体、枚举)的访问级别。假设函数声明为@H_404_1@public@H_404_1@@H_404_1@级别,而参数或者返回类型声明为@H_404_1@internal@H_404_1@@H_404_1@或@H_404_1@private@H_404_1@@H_404_1@,就会出现函数可以被任何人访问,而它的参数和返回类型不可以访问的矛盾情况。@H_404_1@
@H_404_1@
2. @H_404_1@@H_404_1@设计原则@H_404_1@@H_404_1@
@H_404_1@如果我们编写的是应用程序,应用程序包中的所有@H_404_1@Swift@H_404_1@@H_404_1@文件和其中定义的实体,都是供本应用使用的,而不是提供其他模块使用,那么我们就不用设置访问级别了,即使用默认的访问级别。@H_404_1@@H_404_1@
@H_404_1@如果我们开发的是框架,框架编译的文件不能独立运行,因此它天生就是给别人使用的,这种情况下我们要详细设计其中的@H_404_1@Swift@H_404_1@@H_404_1@文件和实体的访问级别,让别人使用的可以设定为@H_404_1@public@H_404_1@@H_404_1@,不想让别人看到的可以设定为@H_404_1@internal@H_404_1@@H_404_1@或@H_404_1@private@H_404_1@@H_404_1@。@H_404_1@@H_404_1@
@H_404_1@ @H_404_1@3. @H_404_1@@H_404_1@元组类型的访问级别@H_404_1@@H_404_1@
@H_404_1@元组类型的访问级别遵循元组中字段最低级的访问级别,例如下面的代码:@H_404_1@@H_404_1@
@H_404_1@private 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 = "" } private let emp = Employee() var dept = Department() private var student1 = (dept,emp) ①
@H_404_1@ @H_404_1@
4. @H_404_1@@H_404_1@枚举类型的访问级别@H_404_1@@H_404_1@
@H_404_1@枚举中成员的访问级别继承自该枚举,因此我们不能为枚举中的成员指定访问级别。示例代码如下:@H_404_1@@H_404_1@
@H_404_1@@H_404_1@
public enum WeekDays { case Monday case Tuesday case Wednesday case Thursday case Friday }
@H_404_1@
由于@H_404_1@WeekDays@H_404_1@@H_404_1@枚举类型是@H_404_1@public@H_404_1@@H_404_1@访问级别,因而它的成员也是@H_404_1@public@H_404_1@@H_404_1@级别。@H_404_1@@H_404_1@
@H_404_1@ @H_404_1@@H_404_1@
@H_404_1@@H_404_1@
@H_404_1@欢迎关注关东升新浪微博@H_404_1@@tony_@H_404_1@关东升。@H_404_1@
@H_404_1@关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息@H_404_1@
@H_404_1@@H_404_1@@H_404_1@@H_404_1@更多精品@H_404_1@iOS@H_404_1@、@H_404_1@Cocos@H_404_1@、移动设计课程请关注智捷课堂官方网站:@H_404_1@http://www.zhijieketang.com@H_404_1@智捷课堂论坛网站:@H_404_1@http://51work6.com/forum.php@H_404_1@