Swift学习之 - 访问控制权限(fileprivate,private,internal,public,open)

2023-11-01

先来看下小白的错误代码

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        text()
        
    }
    
}
extension ViewController{
    
    private func text(){
        print("text")
    }
    
}

在调用text()方法的时候,xcode会提示我们text方法为私有private,意思你不能访问到吧!当时小白不能明白,同一个swift源文件,都是viewcontroller为什么都不能访问呢?

网上查了下swift3.0新增了一个次于private访问控制权限fileprivate,当小白把上面的代码中的private改为fileprivate都正确了!

1,private
private访问级别所修饰的属性或者方法只能在当前类里访问。
2,fileprivate
fileprivate访问级别所修饰的属性或者方法在当前的Swift源文件里可以访问。(比如上门样例把private改成fileprivate就不会报错了)
3,internal(默认访问级别,internal修饰符可写可不写)
internal访问级别所修饰的属性或方法在源代码所在的整个模块都可以访问。
如果是框架或者库代码,则在整个框架内部都可以访问,框架由外部代码所引用时,则不可以访问。
如果是App代码,也是在整个App代码,也是在整个App内部可以访问。
4,public
可以被任何人访问。但其他module中不可以被override和继承,而在module内可以被override和继承。
5,open
可以被任何人使用,包括override和继承。
从高到低排序如下:
1
open >  public  > interal > fileprivate >  private


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift学习之 - 访问控制权限(fileprivate,private,internal,public,open) 的相关文章

随机推荐

  • gdb之info/show命令

    一 gdb命令 相对于常见和常用的backtrace break watch step之类的指令来说 这两个都是相对比较小众的功能 只管来说 小众的功能就是使用的人比较少的功能 而使用的比较少的原因也可能是多方面的 一个可能的原因就是大部分
  • 并发程序设计

    ComputeTask h void executeComputeTask ComputeTask c include ComputeTask h include
  • 书摘】程序员成长的10个阶段

    导读 本文节选自机械工业出版社 程序员成长路线图 一书 该书的作者N216 张磊和吉阳一起回忆和总结了自己几十年的程序员成长经历 对当前程序员关心的热点 重点 难点问题给出了自己的看法和建议 通过对程序员的成长阶段进行划分 使得各个阶段的程
  • 什么是Java的跨平台性?原理是什么?

    所谓跨平台性 是指java语言编写的程序 一次编译后 可以在多个系统平台上 运行 实现原理 Java程序是通过java虚拟机在系统平台上运行的 只要该系统可以安 装相应的java虚拟机 该系统就可以运行java程序 机器码再上CPU运行 什
  • 《工程伦理与学术道德》之《工程活动中的环境伦理》

    工程伦理与学术道德 之 工程活动中的环境伦理 工程活动中的环境伦理 4 1 工程活动中环境伦理观念的确立 4 1 1 工业化过程中保护环境的两种思路 4 1 2 工程环境伦理的基本思想 4 1 3 工程环境伦理的核心问题 4 2 工程活动中
  • 22. 面向对象 - 高阶

    Hi 大家好 我是茶桁 之前的课程里面 我们简单的接触了面向对象编程 也和大家讲解了其思想 优缺点 相信上节课程结束之后 大家对面向对象都有了一定的理解 那么我们这节课 就进入面向对象的一些高阶部分 让我们继续来学习一些魔术方法以及Pyth
  • redis mysql_redis和mysql的结合示例

    mysql和redis的区别 mysql是关系型数据库 主要用于存放持久化数据 将数据存储在硬盘中 读取速度较慢 redis是非关系型数据库 即将数据存储在缓存中 缓存的读取速度快 能够大大的提高运行效率 但是保存时间有限 django中使
  • 【python】if __name__==‘__mian__‘ 如何理解,原理及作用

    1 什么是 name 1 为什么使用 name 属性 Python解释器在导入模块时 会将模块中没有缩进的代码全部执行一遍 模块就是一个独立的Python文件 开发人员通常会在模块下方增加一些测试代码 为了避免这些测试代码在模块被导入后执行
  • 【Flutter 1-14】Flutter手把手教程Dart语言——Dart语言引用、import、package使用

    作者 弗拉德 来源 弗拉德 公众号 fulade me 库 import 关键字可以帮助你创建一个模块化和可共享的代码库 代码库不仅只是提供 API 而且还起到了封装的作用 以下划线 开头的成员仅在代码库中可见 使用库 使用import来指
  • 对数学期望、方差、协方差、协方差矩阵的理解

    参考 概率论与数理统计 浙大 关键词 数学期望 数学期望的性质 方差 标准差 方差的性质 协方差 相关系数 协方差矩阵 数学期望 变量分布的中心 数学期望也叫期望 或者均值 E X 完全由X的概率分布决定 若X服从某一分布 也成E X 是该
  • [总结]音视频基础知识·一

    目前状态 音视频领域知识零基础 已经掌握理论或技能 1 数学 高等数学 概率论与数理统计 线性代数 2 计算机 计算机操作系统原理 计算机网络 C C 语言 3 信号处理 数字信号处理 信号与系统 4 嵌入式 单片机原理与应用 Linux基
  • 35. Search Insert Position(二分查找加插入下标)

    题目 Given a sorted array and a target value return the index if the target is found If not return the index where it woul
  • IDEA查看类的继承关系图形技巧,你学会了吗?

    最近正好也没什么可忙的 就回过头来鼓捣过去的知识点 到Servlet部分时 以前学习的时候硬是把从上到下的继承关系和接口实现记得乱七八糟 这次利用了IDEA的diagram 结果一目了然 也是好用到炸裂 就此分享 1 查看图形形式的继承链
  • 【Java】企业微信群机器人发送消息(文字、图片、MarkDown、文件消息)

    Java调用企业微信群机器人发送消息 2022 4 22更新 新增可发送文件消息 发送文件消息需要先将文件上传到企业微信的临时素材 url为https qyapi weixin qq com cgi bin webhook upload m
  • 项目打包部署之部署jar包和war包

    一 概述 本文将介绍将Java项目部署到Linux服务器上的步骤 首先 你需要了解服务器的基本知识和安装Java环境的方法 然后 我们就jar包和war包两种应用部署到Linux服务器上来进行讲解 包括如何将应用程序上传到服务器 如何配置服
  • keil编译错误 "Please select first the target STM32F10x...

    keil编译STM32工程时 error directive Please select first the target STM32F10x device used in your application in stm32f10x h f
  • 基于OpenCV的垃圾分类项目的C++代码详解——学习笔记(三)

    基于OpenCV C 垃圾分类项目的代码详解 工训总结 对分类结果进行简单的界面显示 Begining 今天给大家介绍一个简单写界面的代码 一 问题描述 1 当我们在做工程的时候经常需要一个简单的图形化用户界面来显示工程内部的变量信息 这个
  • JVM--基础--27.4--工具--MemoryAnalyzer--介绍、安装

    JVM 基础 27 4 工具 MemoryAnalyzer 介绍 安装 1 介绍 Memory Analyzer 是一个跨平台的开源工具 可以用它来分析内存问题 可以用来监控整个 Java 应用程序的状态和行为 1 1 我使用Memory
  • Java:Map转List (用stream实现)

    例子 Map
  • Swift学习之 - 访问控制权限(fileprivate,private,internal,public,open)

    先来看下小白的错误代码 import UIKit class ViewController UIViewController override func viewDidLoad super viewDidLoad text extensio