在 Objective-C 中,实例数据可以是public
、protected
或private
。例如:
@interface Foo : NSObject
{
@public
int x;
@protected:
int y;
@private:
int z;
}
-(int) apple;
-(int) pear;
-(int) banana;
@end
我没有在 Swift 引用资料中找到任何关于访问修饰符的提及。是否可以在 Swift 中限制数据的可见性?
最佳答案
As of Swift 3.0.1, there are 4 levels of access , 下面从最高(限制最少)到最低(限制最多)进行描述。
1。 open
和 public
使实体能够在定义模块(目标)之外使用。在指定框架的公共(public)接口(interface)时,您通常使用 open
或 public
访问。
但是,open
访问权限仅适用于类和类成员,它与public
访问权限的区别如下:
public
类和类成员只能在定义模块(目标)内进行子类化和覆盖。open
类和类成员可以在定义模块(目标)内外进行子类化和覆盖。
// First.framework – A.swift
open class A {}
// First.framework – B.swift
public class B: A {} // ok
// Second.framework – C.swift
import First
internal class C: A {} // ok
// Second.framework – D.swift
import First
internal class D: B {} // error: B cannot be subclassed
2。 内部
使实体能够在定义模块(目标)中使用。在定义应用或框架的内部结构时,您通常使用internal
访问。
// First.framework – A.swift
internal struct A {}
// First.framework – B.swift
A() // ok
// Second.framework – C.swift
import First
A() // error: A is unavailable
3。 文件私有(private)
将实体的使用限制在其定义的源文件中。当在整个文件中使用这些细节时,您通常使用 fileprivate
访问权限来隐藏特定功能的实现细节。
// First.framework – A.swift
internal struct A {
fileprivate static let x: Int
}
A.x // ok
// First.framework – B.swift
A.x // error: x is not available
4。 私有(private)
将实体的使用限制在其封闭声明中。当这些细节仅在单个声明中使用时,您通常使用 private
访问来隐藏特定功能的实现细节。
// First.framework – A.swift
internal struct A {
private static let x: Int
internal static func doSomethingWithX() {
x // ok
}
}
A.x // error: x is unavailable
关于access-modifiers - Swift 有访问修饰符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24005826/