Tags: Swift 学习笔记

发布时间:2015-08-24
修改时间:2015-08-25
修改内容:添加“单元测试对象的访问级别”一节内容。
作者:Erwin
博客地址:技术杂货铺
欢迎转载,转载请注明出处。

Swift学习笔记系列——(24)访问控制

访问控制的对象

  1. 单个的类、结构体和枚举
  2. 属于1的属性、方法、构造方法和下标
  3. 协议的适用范围

模块和源文件

访问控制的基础

  • 模块

一系列代码,Xcode中的一个构造目标

  • 源文件

单独的源代码文件

三种访问级别

  • public

本模块的任意源文件内可以访问
导入所在模块的其他模块的源文件可以访问

  • Internal

默认的访问级别
同一模块的任意源代码中都可以访问

  • Private

同一源文件可以访问

访问级别的指导原则

衍生物的访问级别不能高于母体。

默认访问级别

Internal

单元测试对象的访问级别

毫无疑问,声明为public的测试对象可以被测试代码访问;要想访问internal的实体,可以在测试模块的导入声明处用@testable标记。

访问控制具体规则

使用场景 默认 限制 选项
自定义类型 声明为private的类型,其成员默认是private的。
声明为public或internal的类型,其成员默认是internal的
元组 元组的访问级别要取元组成员访问级别最低
函数 为函数参数类型和函数返回值类型的最低者
枚举 枚举分支 和枚举类型访问级别一致 可以指定访问级别
枚举初始值和组合值 不能低于枚举类型的访问级别
嵌套类型 同定制类型
子类型 子类型自身 子类型的访问级别不能高于超类
子类型重写 重写可以提高访问级别
常量、变量属性和下标 自身 不能高于所处类型和自身类型的访问级别
getter和setter 所属于对象的访问级别 可以单独设置setter为较低的访问级别
构造方法 自定义构造方法 不能高于它要构造的类型的访问级别
必要构造方法访问级别和所在类的访问级别一致
默认构造方法 和访问类型一致
public类型的构造方法默认为internal
结构体的默认成员构造方法 internal,一旦有存储舒适是private则为private 可以指定为public
协议 协议自身 协议成员的访问类型和协议的访问类型一致
协议继承 新协议最多具有和被继承协议相同的访问级别
协议实现 类型实现一个协议的访问级别,要取类型和协议的访问级别最低者,协议要求的每一个部分不能低于这个访问级别。 类型可以用用低于自身的访问级别实现一个协议
扩展 扩展自身 添加的成员,具有扩展类型成员的默认访问级别 给扩展指定明确的访问级别,同时也是指定了扩展内容的访问级别
可以给单个成员指定访问级别
用扩展实现协议 协议实现的默认访问级别和协议的访问级别一致 类型实现一个协议的访问级别,要取类型和协议的访问级别最低者,协议要求的每一个部分不能低于这个访问级别。
添加对协议的实现,不能指定访问级别
泛型 一个泛型类型或者泛型方法的访问级别要在 其自身的访问级别与其类型参数访问级别中取最低的
类型别名/联合类型 类型别名的访问级别要等于或者低于它所替代类型的访问级别

本章思维导图

说明:紫色字体存疑

Swift学习笔记系列——24访问控制的更多相关文章

  1. ios – 为什么在Swift中使用私有属性/方法并不常见

    为什么在Swift/Cocoa中你很少看到私有访问器用于你不希望程序的其他部分访问的属性?有人可以如此善良并解释一般的概念访问器吗?

  2. Swift 新特性 - 访问控制Access Control

    模块和源文件Swift中的访问控制模型基于模块和源文件这两个概念。在Swift中,Framewordk或Appbundle被作为模块处理。访问级别Swift提供了三种不同的访问级别。通常情况下,某个接口或Framework作为内部结构使用时,你可以将其设置为internal级别。访问控制语法通过修饰符public、internal、private来声明实体的访问级别:除非有特殊的说明,否则实体都使用默认的访问级别internal,可以查阅默认访问级别这一节。

  3. [翻译]Swift编程语言——初始化

    初始化初始化是准备类、结构体或者枚举的一个实例供使用的过程。不同于OC的构造方法,Swift的构造方法不返回值。构造方法的主要作用是在类型的实例被首次使用前,确保该实例被正确的初始化。通过在定义时指定一个初始值给出默认属性值。因此在没有提供外部名称的情况下,Swift为每一个参数提供一个自动的外部名称。在一个新的surveyQuestion实例被初始化时,这个属性被自动的初始化为nil,意味着“还没有字符串内容”。

  4. [翻译]Swift编程语言——自动引用计数

    多数情况下,这意味着内存管理由Swift处理,不需要思考如何管理内存。NOTE引用计数只对类实力适用。ARC实战这里有一个例子展示自动引用计数是如何工作的。这样做是为了确保初始化过程执行了。解决类实例之间的强引用环当处理类类型的属性时,Swift提供两种方式来解决强引用环:弱引用和无主引用。这个行为阻止了引用成为强引用环的一部分。

  5. [翻译]Swift编程语言—— 扩展

    (和OC中的categories不同的是,Swfit的扩展不可以有名字。)Swift中的扩展可以做以下事情:添加计算属性和计算静态属性;定义实例方法和类型方法;提供新的构造方法;定义下标;定义和使用新的潜逃类型;让被扩展的类型遵循一个协议;NOTE扩展可以给一个类型添加新功能,但不能重写已经存在的功能。这个例子给Swift内嵌的Double类型添加了五个实例计算属性,来处理不同的距离单位:这些计算属性表示了一个Double数值将会被作为特定的长度单位被转换。

  6. [翻译]Swift编程语言——协议

    协议可以被一个类、结构体或者枚举采用,后者需要提供协议要求的实现。协议中,通常用class前缀表示类型属性。协议规定任何的FullNamed类型必须提供一个只读的、叫做fullName的、String类型的实例属性。这里有一个更复杂的类,同样也遵循了FullyNamed协议:这个类用一个只读的计算属性实现了fullName。下面的例子定义了一个叫做onOffSwitch的枚举。枚举的toggle实现被mutating标记了,为了满足Toggleable协议的要求:构造方法的要求协议可以对遵循它的类型的构造

  7. [翻译]Swift编程语言——访问控制

    Protocolscanberestrictedtoacertaincontext,ascanglobalconstants,variables,andfunctions.除了提供访问控制的多种级别,Swfit通过提供默认访问级别来限制需要指定明确访问级别的需要。模块和源文件Swfit的访问控制模型是基于模块和源文件概念的。访问级别Swift提供了三种访问级别。Private限制只能在实体对象的定义文件使用它们。Public是最高的访问级别,Private是最低的访问级别。下文会涵盖针对Swfit语言的不

  8. 2015年2月到2015年6月8日2.0发布Swift主要更新

    存放的元素需要遵循hashable协议。调用一个抛出错误的函数/方法/闭包,前面要用try。捕获和处理错误do-catch格式:do{尽量确保能捕获所有错误。catch不指定匹配模式将匹配所有错误。调用,不必处理错误。如有错误发生,会导致运行时错误。多个defer语句按照定义顺序倒叙执行。

  9. Swift学习之 访问控制

    模块和源文件Swift中的访问控制模型基于模块和源文件这两个概念。在Swift中,Framework或Appbundle被作为模块处理。访问级别Swift提供了三种不同的访问级别。Public为最高级访问级别,Private为最低级访问级别。访问控制语法通过修饰符public、internal、private来声明实体的访问级别:publicclassSomePublicclass{}internalclassSomeInternalClass{}privateclassSomePrivateClass{

  10. Swift学习笔记系列——13初始化

    Swift学习笔记系列——初始化初始化目标:类、结构体和枚举目的:实例使用前的准备,存储属性赋值以及其他必要操作给存储属性初始值类和结构体的存储属性在使用前必须要有初始值,提供初始值可以通过定义时指定,也可以通过构造方法赋值。结构体的额外特权即使没有给全部属性度提供默认值,结构体仍会自动获得一个构造方法。继承链上的构造方法失败后,后续初始化操作不再继续执行。可失败构造方法init!

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部