浅谈swift 4.0中private所发生的变化

 更新时间:2020年6月30日 23:37  点击:1924

前言

当Swift首次引入访问级别时,对此进行了一些混淆和不解。虽然开发人员对于添加对Swift编程语言的访问控制感到兴奋,但是private关键字的行为与其他编程语言的行为不同。

之前在swift 3.0的时候,如果把声明的变量或方法加上private前缀,那么它就只能在当前的class里使用,extension 中也不能使用。改成fileprivate,却又可以在其他类中实例化后使用,属性的作用域就会更大,可能会不小心造成属性的滥用。

所以在Swift 4 中,private 的属性的作用域扩大到了 extension 中,并且被限定在了 struct 和 extension 内部,这样就不需要再改成 fileprivate 了。

Swift4.0到底有哪些新改变呢?

  • 字符串String类型更加人性化,多行字符串文字,支持Range,也算集合类型
  • 改进的private的访问权限,私有访问修饰符
  • 更智能更安全的Key Value Coding 键值编码
  • 词典和集合
  • 归档和序列化
  • 单面范围
  • 通用下标
  • MutableCollection.swapAt( __ : _ _ )
  • 相关类型限制
  • 类和协议存在
  • 限制@objc推论

下面进行本文的正文介绍:

上代码

class ViewController: UIViewController {
 var test = ""
 private var test1 = ""
 fileprivate var test2 = ""
 override func viewDidLoad() {
  super.viewDidLoad()
  testIt() // 之前会报错 需要修改为fileprivate
 }
 func testForNormal(){ 
 }
 private func testForPrivate(){ 
 }
 fileprivate func testForfileprivate(){  
 }
 override func didReceiveMemoryWarning() {
  super.didReceiveMemoryWarning()
  // Dispose of any resources that can be recreated.
 }
}
extension ViewController {
 private func testIt(){
  testForPrivate() /// swift 4.0 可以访问 之前不行
 }
}
class other {
 let a = ViewController()
 func lalal(){
  _ = a.test /// Normal
  _ = a.test2 /// fileprivate
  a.testForNormal() /// Normal
  a.testForfileprivate() /// fileprivate
  a.testForPrivate() /// 报错 'testForPrivate' is inaccessible due to 'private' protection level
 } 
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对猪先飞的支持。

[!--infotagslink--]

相关文章

  • 举例分析private的作用(c/c++学习)

    我知道我们可以用 public 中的值,把private中的数据给提出来,但是还是搞不懂private该怎么用,或者说在一个具体程序中,private有什么用...2020-08-20
  • 浅析PHP7新功能及语法变化总结

    这篇文章主要介绍了浅析PHP7新功能及语法变化总结的相关资料,需要的朋友可以参考下...2016-06-24
  • C++中的三种继承public,protected,private详细解析

    我们已经知道,在基类以private方式被继承时,其public和protected成员在子类中变为private成员。然而某些情况下,需要在子类中将一个或多个继承的成员恢复其在基类中的访问权限...2020-04-25
  • 构造函数定义为private或者protected的好处

    从语法上来讲,一个函数被声明为protected或者private,那么这个函数就不能从“外部”直接被调用了。对于protected的函数,子类的“内部”的其他函数可以调用之。而对于private的函数,只能被本类“内部”的其他函数说调用...2020-04-25
  • visio二次开发--判断文档是否已发生变化(变化就加星号*)

    最近做一个故障树诊断的项目,用visio二次开发,可以同时打开多个绘制的故障树图形文档。项目中需要实现判断文档是否发生变化,这是很多编辑软件的基本功能,变化了就加个星号*...2020-06-25
  • 从C语言过渡到C++之基本变化

    在之前的C++代码训练营系列中,我试图用完成具体项目的方式给大家介绍C++,但后来大家反馈说这样从C过渡到C++有点跟不上。于是我又专门设计了这个《从C到C++》的过渡专题,我准备通过10篇文章介绍一下C++和C的重要区别。...2020-04-25
  • Golang 1.16 中 Modules的主要变化更新

    这篇文章主要介绍了Golang 1.16 中 Modules的主要变化更新,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-25
  • swift4.0实现视频播放、屏幕旋转、倍速播放、手势调节及锁屏面板等功能实例

    这篇文章主要给大家介绍了关于swift4.0实现视频播放、屏幕旋转、倍速播放、手势调节及锁屏面板等功能的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。...2020-06-30
  • 浅谈swift 4.0中private所发生的变化

    Swift 4是苹果计划于2017年秋季推出的最新版本,其主要重点是提供与Swift 3代码的源兼容性,并努力实现ABI稳定性。下面这篇文章主要给大家介绍了关于swift 4.0中private所发生的一些变化,需要的朋友可以参考下。...2020-06-30
  • Swift5中fileprivate与private的差别浅析

    这篇文章主要给大家介绍了关于Swift5中fileprivate与private的差别的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Swift5具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-30
  • Session值不规律变化的一种可能解决方法

    碰到一个很怪异的问题,当然,有点儿程序用到Session,在Session中存放了一个对象的数组,在本地机器上都没有出现什么问题,但上传到服务器,居然出现怪事儿,放于Session中的这个对象数组的个数、顺利会发生无规律的变化...2016-01-27
  • C#使用private font改变PDF文件的字体详解

    这篇文章主要给大家介绍了关于C#使用private font改变PDF文件的字体的相关资料,文中通过示例代码以及图片介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • 概述C++中的 public protected private friend关键字的用法

    这篇文章简要概述了C++中的 public protected private friend关键字的用法,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧...2020-04-25
  • php 面向对象访问控制 public,private,protected详解

    文章利用举例说明了关于PHP5面向对象访问控制 Public,private,protected详细说明,有需要的朋友可以参考一下。 在PHP5中增强了面向对象的机制,加入了面向对象常见的...2016-11-25
  • ASP.NET MVC5实现文件上传与地址变化处理(5)

    这篇文章主要介绍了ASP.NET MVC5实现文件上传与地址变化处理,需要的朋友可以参考下...2021-09-22
  • php OOP 中private 与public区别教程

    在过去的一页我开始解释了面向对象的重要性和如何创建一个基本对象。在此及以后,我们会敲定许多细节。 类变量和能见度 在班级,我们首先确定我们的变数。在这种情...2016-11-25
  • 深入理解C++中public、protected及private用法

    这篇文章主要介绍了C++中public、protected及private用法,对于C++面向对象程序设计来说是非常重要的概念,需要的朋友可以参考下...2020-04-25
  • php5中public,private,protected 三种类属性的区别

    本文章来给大家介绍在php5中public,private,protected他们三者的区别,他们三个都是用于类中,但是属性完全不同。 public: 公有属性或方法 在子类中可以通过self::va...2016-11-25
  • Swift 4.0中如何引用3.0的第三方库

    这篇文章主要给大家介绍了关于在Swift 4.0中如何引用3.0第三方库的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。...2020-06-30
  • vc++ 监控指定路径下文件变化实现代码

    这篇文章主要介绍了vc++ 监控指定路径下文件变化实现代码,需要的朋友可以参考下...2020-04-25