深入理解Swift中的访问控制关键字
前言
在Swift3.0以前有三种访问控制关键字,分别是private、internal和public。而在swift3以后,又在原来的基础上增加了两种访问控制关键字:fileprivate和open。他们可以看作是private和public的进一步细分。下面是各个修饰符的区别以及访问权限排序。
各个修饰符的区别
private
swift3.0 private访问级别所修饰的属性或者方法只能在当前类里访问。
class A { private func test() { print("this is private function!") } } class B: A { func show() { test() } }
上面代码在swift3.0以前,可以顺利编译成功,但是在swift3.0中会编译失败,提示class B中test()方法不可用。
fileprivate
fileprivate是Swift3.0后新加的权限修饰符,fileprivate访问级别所修饰的属性或者方法在当前的Swift源文件里可以访问。(比如上面例子中把private改成fileprivate就不会报错了)。
internal
internal为默认访问级别,可默认不写。internal访问级别所修饰的属性或方法在源代码所在的整个模块都可以访问。如果是框架或者库代码,则在整个框架内部都可以访问,框架由外部代码所引用时,则不可以访问。如果是App代码,也是在整个App代码,也是在整个App内部可以访问。
public
可以被任何人访问。但其他module中不可以被override和继承,而在module内可以被override和继承。
open
open为swift3.0后新加权限关键字,可以被任何人使用,包括override和继承。
修饰符访问权限排序
从高到低得权限控制顺序如下
open > public > interal > fileprivate > private
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
相关推荐
-
Swift学习教程之访问控制详解
前言 本文主要给大家介绍了关于Swift访问控制的相关内容,访问控制对访问你的其他代码源文件和模块部分进行了约束.这个特性允许你隐藏你的代码实现,并且指定通过其可以访问和使用该代码的优选接口. class,structure 和 enumeration 都可以指定访问级别,当然,property,method,initializer 和 属于这里类型的 subscript.protocol 可以限制到某个上下文,全局变量,变量和函数也可以. 另外,Swift 也提供默认的使用级别给典型的使用场景
-
Swift语言中的一些访问控制设置详解
限制访问代码块,模块和抽象通过访问控制来完成.类,结构和枚举可以根据自己的属性,方法,初始化函数和下标来通过访问控制机制进行访问.常量,变量和函数的协议限制,并允许通过访问控制来访问全局和局部变量.应用于属性,类型及函数的访问控制可以被称为"实体". 访问控制模型是基于模块和源文件的. 模块定义为代码分配一个单独的单元,并且可以使用import 关键字导入.源文件被定义为一个单一的源代码文件,模块可访问多种类型和函数. 三种不同的访问级别是由 Swift 语言提供.它们分别是 Publ
-
Swift 访问权限的资料整理
Swift 访问权限 1>internal :内部的, 1.默认情况下所有的类的属性&方法的访问权限都是internal 2.若本模块(项目/包/target)中可以访问 2> private:私有的 1.只有在本类中可以访问 3> open 公开的 1.可以跨模块(包/target)都是可以访问的 4> fileprivate swift3.0 1.只要在本文件中都是可以进行访问的 示例代码: import UIKit /* 1>internal :内
-
Swift中的访问控制和protected
原文再续,书折第一回. 很多其他编程语言都有一种"protected"设定,可以限制某些类方法只能被它的子类所使用. Swift支持了访问控制后,大家给我们的反馈都很不错.而有的开发者问我们:"为什么Swift没有类似protected的选项?" 当我们在设计Swift访问控制的不同等级时,我们认为有两种主要场景: ●在一个APP里:隐藏某个类的私密细节. ●在一个开源框架里:不让导入这个框架的APP,随便接触框架的内部实现细节. 上面的两种常见情况,对应着priv
-
详解Swift中的下标访问用法
Swift中的Array,Dictionary类型可以通过下标或者键值的方式来进行数据的访问,实际上在Swift的语法中,下标可以定义在类.结构体.枚举中.开发者可以通过下标的方式来对属性进行访问而不用使用专门的存取方法.并且定义的下标不限于一维,开发者可以定义多维的下标来满足需求. 下标的语法结构 下标使用subscript来定义,其有些类似于方法,参数和返回值本别作为下标入参和通过下标所取的值.但是在subscript实现部分,又十分类似于计算属性,其需要实现一个get块和可选实现一个set
-
深入理解Swift中的访问控制关键字
前言 在Swift3.0以前有三种访问控制关键字,分别是private.internal和public.而在swift3以后,又在原来的基础上增加了两种访问控制关键字:fileprivate和open.他们可以看作是private和public的进一步细分.下面是各个修饰符的区别以及访问权限排序. 各个修饰符的区别 private swift3.0 private访问级别所修饰的属性或者方法只能在当前类里访问. class A { private func test() { print("thi
-
深入理解Java中的final关键字_动力节点Java学院整理
Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例.final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的. final关键字的含义? final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如
-
深入理解Swift中的变量与常量
前言 最近在学习Swift这门新语言,对于熟练掌握OC编程的iOS开发者来说其实很容易上手,但Swift的确在语法和编程习惯上改变了很多,对于从未了解OC语言而从Swift开始学习iOS开发的新手来说可能上手有一定难度,下面我将这段时间的学习成果结合在网上搜索的知识做一个简单的汇总,希望可以帮助到正在学习Swift的小伙伴们. 变量和常量的定义 Swift开发文档中是这样定义变量和常量的:常量和变量把名字和一个特定类型的值关联起来.常量的值一旦设置好便不能再被更改,然而变量可以在将来被设置为不同
-
深入理解typescript中的infer关键字的使用
infer 这个关键字,整理记录一下,避免后面忘记了.有点难以理解呢. infer infer是在 typescript 2.8中新增的关键字. infer 可以在 extends 条件类型的字句中,在真实分支中引用此推断类型变量,推断待推断的类型. 例如:用infer推断函数的返回值类型 type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any; type fn = () => number type
-
初步理解Swift中的泛型
如果你已经动手写过Swift的程序,相信你已经了解了Swift语言的知识,比如如何写类(class)和结构体(struct).但Swift可没这么简单,呵呵呵.这篇教程主要讲述Swift的一个强力的特性:泛型.这个特性在很多程序设计语言里都非常受欢迎. 对于类型安全(type-safe)语言,一个常见的问题就是如何编写适用于多种类型输入的程序.想象一下,两个整型数相加和两个浮点数相加的程序看起来应该非常类似,甚至一模一样才对.唯一的区别就是变量的类型不同. 在强类型语言中,你需要去定义诸如add
-
深入理解java中的synchronized关键字
synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程A每次运行到这个方法时,都要检查有没有其它正在用这个方法的线程B(或者C D等),有的话要等正在使用这个方法的线程B(或者C D)运行完这个方法后再运行此线程A,没有的话,直接运行它包括两种用法:synchronized 方法和 synchronized 块. 1. synchronized 方法:通过在方法声明中加入 synchronized关键字来声明 synchronized 方法.如: 复制代码 代码如下: publ
-
理解javascript中的with关键字
说起js中的with关键字,很多小伙伴们的第一印象可能就是with关键字的作用在于改变作用域,然后最关键的一点是不推荐使用with关键字.听到不推荐with关键字后,我们很多人都会忽略掉with关键字,认为不要去管它用它就可以了.但是有时候,我们在看一些代码或者面试题的时候,其中会有with关键字的相关问题,很多坑是你没接触过的,所以还是有必要说说with这一个关键字. 一.基本说明 在js高级程序设计中是这样描述with关键字的:with语句的作用是将代码的作用域设置到一个特定的作用域中,基本
-
深入理解Swift中的Substring和String
前言 为文本字符串添加特性或者语法糖在各种编程语言中都很普遍.就拿大家都很熟悉的 C 语言举例,C 字符串本质是一个字符数组(characters array),但是每次输入字符串的时候不用输入 ['h','e','l','l','o'] ,直接打 hello 就可以了,因为这个操作编译器帮你做了. 更高级的语言比如 Swift 处理字符串就不仅仅是当做字符数组了,String 是一个完整的类型,并且有各种特性.我们先来看一下 String 的一个特性:substring. 简单的看一下 Str
-
深入理解Java中的volatile关键字(总结篇)
基本概念 -------------------------------------------------------------------------------- 先补充一下概念:Java 内存模型中的可见性.原子性和有序性. 可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉.通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情.为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制. 可见性,是指线程之间的可见性,一个
随机推荐
- 如何用ASP建立Index Server查询对象并为其参数赋值?
- 通过格式良好的SQL提高效率和准确性
- 详解在Spring Boot框架下使用WebSocket实现消息推送
- Oracle11g RAC开启关闭、设置归档小结
- iOS10 推送完整剖析和注意事项
- weui框架实现上传、预览和删除图片功能代码
- ASP.NET中使用GridView实现分级显示的代码
- asp.net Web.config 详细配置说明
- js汉字转拼音实现代码
- PHP中使用gettext解决国际化问题的例子(i18n)
- Android中实现Webview顶部带进度条的方法
- 每天一个linux命令 chgrp命令
- 妙用Ajax技术实现局部刷新商品数量和总价实例代码
- Mysql存储过程中游标的用法实例
- Android 数据存储方式有哪几种
- Ruby简明教程之数组和Hash介绍
- SQL Server 2005/2008 用户数据库文件默认路径和默认备份路径修改方法
- jquery实现聚光灯效果的方法
- 多种js图片预加载实现方式分享
- 微信小程序实现tab左右切换效果