前言
当Swift首次引入访问级别时,对此进行了一些混淆和不解。虽然开发人员对于添加对Swift编程语言的访问控制感到兴奋,但是private关键字的行为与其他编程语言的行为不同。
之前在swift 3.0的时候,如果把声明的变量或方法加上private前缀,那么它就只能在当前的class里使用,extension 中也不能使用。改成fileprivate,却又可以在其他类中实例化后使用,属性的作用域就会更大,可能会不小心造成属性的滥用。
所以在Swift 4 中,private 的属性的作用域扩大到了 extension 中,并且被限定在了 struct 和 extension 内部,这样就不需要再改成 fileprivate 了。
Swift4.0到底有哪些新改变呢?
下面进行本文的正文介绍:
上代码
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 } }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。
本文向大家介绍浅谈javascript中的 “ && ” 和 “ || ”,包括了浅谈javascript中的 “ && ” 和 “ || ”的使用技巧和注意事项,需要的朋友参考一下 有时候,我们会在jQuery框架或者其他js插件中发现里面有很多 “ && ” 和 “ || ”,那么这两个标识到底是什么含义?怎么使用?我觉得还是有必要稍微深究一下。 一、原理: && 操作符特点:逻辑运算表达式中
本文向大家介绍浅谈javascript中的constructor,包括了浅谈javascript中的constructor的使用技巧和注意事项,需要的朋友参考一下 constructor,构造函数,对这个名字,我们都不陌生,constructor始终指向创建当前对象的构造函数。 这里有一点需要注意的是,每个函数都有一个prototype属性,这个prototype的constructor指向这个函
本文向大家介绍浅谈AJAX开发技术,包括了浅谈AJAX开发技术的使用技巧和注意事项,需要的朋友参考一下 AJAX(Asynchronous JavaScript and XML,异步JavaScript和XML),AJAX并不是一项新的技术,它产生的主要目的是用于页面的局部刷新,从之前的代码开发来看,读者可以发现,每当用户向服务器端发出请求时,那怕需要的只是简单的更新一点点的局部内容,服务器端都会
本文向大家介绍浅谈Linux条件变量的使用,包括了浅谈Linux条件变量的使用的使用技巧和注意事项,需要的朋友参考一下 Linux线程同步之间存在多种机制,条件变量是一种类似操作系统里提到的生产者-消费者算法的同步机制,允许线程以无竞争的方式等待特定条件的发生。 示例伪代码: 条件变量需要配合互斥量一起使用,互斥量作为参数传入wait函数,函数把调用线程放到等待条件的线程列表上,然后对互斥量解锁,
本文向大家介绍浅谈java String不可变的好处,包括了浅谈java String不可变的好处的使用技巧和注意事项,需要的朋友参考一下 一、java内部String类的实现: java 8: java 9 及之后:(使用coder标识了编码) 二、为何要将String定义为final不可变? 因为在程序编写的过程中,会大量地用到String常量,如果每次声明一个String引用都要新建一个St
本文向大家介绍浅谈Python中的可变对象和不可变对象,包括了浅谈Python中的可变对象和不可变对象的使用技巧和注意事项,需要的朋友参考一下 什么是可变/不可变对象 不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。 可变对象,该对象所指向的内存中的值可以被改变。变量(准确