控制访问权限

Swift中的控制访问权限有5种,分别是private,fileprivate,public,open,intelnal。

如果我们没有写访问权限关键字时,默认的访问权限是intelnal

访问控制权限从高到低的顺序是:open > public > intelnal > fileprivate > private。

  • private: 仅在当前定义的作用域有效。
  • fileprivate:仅在当前定义的源文件中有效
  • Intelnal:默认的访问权限,可以被定义模块中的任意源文件访问,但不可以被该模块外的任何源文件访问
  • public:开放式的访问,能够在定义的模块中任何源文件中访问
  • open:最不受限制的访问级别,可以在任何地方、任何模块间被继承或重写

private

private访问级别只能在当前定义的作用域访问。使用场景:单例 。

这里注意:不能在方法或者函数中定义一个private修饰的变量,因为两者的作用域是相同的,即方法中定义的变量只能在方法中被访问,而private也只在定义的作用域有效。

class类中定义的private私有变量,只能在类内访问,类外无法被访问。

filePrivate

filePrivate:仅在当前定义的源文件中有效

例如:

bash 复制代码
//在OtherFile.swift中定义一个filePrivate的类
import Foundation

fileprivate class FPObject{
    var age:Int
    init(age: Int) {
        self.age = age
    }
}

在main.swift 中无法访问该类,如图:

在OtherFile.swift文件中访问该类,不能使用高于filePrivate:

需要使用private/fileprivate修饰:

如果是在方法中访问该类,则不用修饰符:

Intelnal

Internal:默认访问级别,允许定义模块中的任意源文件访问,但不能被该模块之外的任何源文件访问(例如 import Foundation,其中Foundation就是一个模块)

例如:

在OtherFile.swift中,我们更改模块,然后访问main.swift中的该类,程序会报错:

public

public:开放式访问,使我们能够在其定义模块的任何源文件中使用代码,并且可以从另一个源文件访问源文件。但是只能在定义的模块中继承和子类重写

open

open:最不受限制的访问级别,可以在任意地方、任意模块间被继承、定义、重写

public与open的区别:

  • 在一个模块中定义的public类或方法可以被其他模块访问,但不能在这些模块中被继承或重写‌

  • 在一个模块中定义的open类或方法不仅可以在其他模块中被访问,还可以在这些模块中被继承或重写‌

相关推荐
传奇开心果编程19 小时前
【SwiftUI提高练中学】第13课 实时活动与灵动岛:ActivityKit 实战
学习·ui·ios·swiftui·swift
AC赳赳老秦1 天前
数据采集全链路审计留痕:用 OpenClaw 实现合规审计与追溯
开发语言·汇编·python·php·swift·deepseek·openclaw
传奇开心果编程1 天前
【SwiftUI入门练中学】第17课 通知与后台任务
学习·ui·ios·swiftui·swift
逐流人2 天前
Ceph对象存储与文件系统存储管理:从RADOS网关、S3与Swift到CephFS快照同步
linux·运维·ceph·云原生·云计算·swift·rados
传奇开心果编程3 天前
【SwiftUI入门练中学】第7课 动画与手势:让界面更灵动
学习·macos·ui·ios·swiftui·swift
传奇开心果编程4 天前
【SwiftUI娓娓道来】第3课:让界面活起来——交互与动画指南
学习·macos·ui·ios·swiftui·swift
用户38034165882974 天前
控制中心一键后台录音:我被自己的 Spike 骗了两次
ios·swift
东坡肘子4 天前
iPhone Duo 留给开发者的一个月 -- 肘子的 Swift 周报 #155
人工智能·swiftui·swift
茶底世界之下6 天前
导出进度不是一个百分比:AVFoundation 收尾阶段的状态建模
ios·swift
茶底世界之下6 天前
为什么媒体源不能在回调仍执行时提前报告 finish?
swift