cry*_*ypt 10 access-modifiers access-control access-levels swift swift4
在Swift 4中,由于现在private在同一源代码文件中也可以看到扩展,它与fileprivate访问修饰符有什么不同?
背景:在Swift 3中,类中的私有变量在同一文件的扩展中不可见.为此,fileprivate必须使用.
Kru*_*nal 32
文件专用
文件专用访问将实体的使用限制在其自己的定义源文件中.当在整个文件中使用这些详细信息时,使用文件专用访问来隐藏特定功能的实现细节.
语法: fileprivate <var type> <variable name>
示例: fileprivate class SomeFilePrivateClass {}
私有
私有访问将实体的使用限制为封闭声明,以及同一文件中该声明的扩展.当这些详细信息仅在单个声明中使用时,使用私有访问来隐藏特定功能的实现细节.
语法: private <var type> <variable name>
示例: private class SomePrivateClass {}
以下是有关所有访问级别的更多详细信息:Swift - Access Levels
回答你的问题:( 在Swift 3中,类中的私有变量在同一文件的扩展名中不可见.为此,必须使用fileprivate.)
是的,在Swift 4.0中,Private现在可以在扩展名中访问,但在同一个文件中.如果您在其他文件中声明/定义扩展名,则扩展程序将无法访问您的私有变量
看看这个图像:
文件: ViewController.swift
这里扩展和视图控制器都在同一个文件中,因此私有变量testPrivateAccessLevel可以在扩展中访问

File: TestFile.swift
这里扩展和视图控制器都在不同的文件中,因此testPrivateAccessLevel扩展名中无法访问私有变量.


这里的类ViewController2是它的子类,ViewController并且都在同一个文件中.此处私有变量testPrivateAccessLevel在子类中不可访问,但fileprivate可在子类中访问.

适用于swift 4.0及其版本
仅在类及其扩展中的
Private
Private访问(当扩展名在同一.swift文件中时).
文件专用
文件 - 仅在类及其扩展名和子类中的私有访问(当扩展名或子类在同一.swift文件中时).