在Swift 4中,由于现在private在扩展中也可以在同一源代码文件中看到,因此它与fileprivate访问修饰符有何不同?

背景:在Swift 3中,类的私有(private)变量在同一文件的扩展名中不可见。为此,必须使用fileprivate

最佳答案

文件私有(private)
文件专用访问将实体的使用限制为自己定义的源文件。当在整个文件中使用特定功能的实现细节时,使用文件专用访问权限可以隐藏这些功能的实现细节。
语法:fileprivate <var type> <variable name>示例:fileprivate class SomeFilePrivateClass {}
私有(private)
私有(private)访问将实体的使用限制为封闭的声明以及在同一文件中的声明的扩展名。仅在单个声明中使用特定功能的实现细节时,请使用私有(private)访问权限来隐藏这些细节。
语法:private <var type> <variable name>示例:private class SomePrivateClass {}
以下是有关所有访问级别的更多详细信息:Swift - Access Levels

您的问题的答案:
(在Swift 3中,类的私有(private)变量在同一文件的扩展名中不可见。为此,必须使用fileprivate。)



看这张图片:
文件: ViewController.swift
这里扩展和 View Controller 都在同一个文件中,因此私有(private)变量testPrivateAccessLevel在扩展中可以访问

文件: TestFile.swift
这里,扩展名和 View Controller 都在不同的文件中,因此私有(private)变量testPrivateAccessLevel在扩展名中不可访问。



这里的ViewController2类是ViewController的子类,它们都在同一个文件中。在这里,私有(private)变量testPrivateAccessLevel在子类中不可访问,而fileprivate在子类中可访问。

10-02 22:17