fileprivate 和 private 扩展名之间的区别?

2024-03-01

斯威夫特3.0

我知道fileprivate访问级别修饰符限制对声明它的源文件的函数/属性的使用,并且private- 仅限于声明的词法范围。但似乎这条规则不适用于延期。例如。此代码有效:

class Foo {
}

fileprivate extension Foo {
    var aa: Int {
        return aaa + 10
    }
}

private extension Foo {
    var aaa: Int {
        return 20
    }
}

有人可以帮我找出它们之间的区别吗?谢谢。

斯威夫特4.0

private现在可以在扩展名中但在同一文件中访问。如果您在其他文件中声明/定义扩展,则您的扩展将无法访问您的私有变量。

fileprivate可以在同一文件中访问。


仅当我们谈论类型成员时,差异才会出现。private将限制对同一类型定义中其他方法的访问,而fileprivate事物可以被生活在同一事物中的任何事物所访问.swift file.

对于位于顶层(类型定义之外)的事物,private and fileprivate 做完全相同的事情。所以当你写的时候

fileprivate extension Foo 
{
    var aa: Int 
    {
        return aaa + 10
    }
}

private extension Foo 
{
    var aaa: Int 
    {
        return 20
    }
}

你真的写了

fileprivate extension Foo 
{
    var aa: Int 
    {
        return aaa + 10
    }
}

fileprivate extension Foo 
{
    var aaa: Int 
    {
        return 20
    }
}

最终,同一协议上的两个扩展被编译器解析为单个扩展。

fileprivate extension Foo 
{
    var aa: Int 
    {
        return aaa + 10
    }
    var aaa: Int 
    {
        return 20
    }
}

如果您认为有两个这样的关键字stupid https://twitter.com/slava_pestov/status/849858472476786688,一些 Swift 架构师同意你 https://github.com/apple/swift-evolution/blob/master/proposals/0159-fix-private-access-levels.md。我相信一些风格指南建议您只使用public and private访问修饰符(以及internal修饰符,但默认情况下是这样),因为一般来说,基于每个文件(而不是基于每个模块或每个类型)进行限制并不是特别有用。

如果您必须使用fileprivate修饰符,然后永远不要使用private修饰符在类型范围之外。这很令人困惑(因为private在这种情况下“真的”意味着fileprivate)并使您的代码更难阅读。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

fileprivate 和 private 扩展名之间的区别? 的相关文章

  • 无法更新本地预定通知内容

    在一次 WWDC 会议中 我获得了用于更新现有通知的代码片段 我认为这不起作用 正在尝试更新通知内容 首先 我请求待处理的通知UNUserNotificationCenter这总是有效的 然后 我创建新请求以使用现有唯一标识符更新通知 有
  • buttonWithType' 不可用:使用对象构造 'UIButton(type:)

    我有一个旧版本的 Swift 并尝试这样做 let button UIButton buttonWithType UIButtonType detailDisclosure as UIButton 但得到错误 buttonWithType
  • Apple 推送通知 (APN) 不一致?

    通过 APN 使用 Apple 的推送通知时 我们遇到了一个令人困惑的问题 我们有以下场景 我猜是相当标准的 当我们的应用程序 我们在这里称之为 MyApp 首次安装并启动时 我们会请求用户授予通过 MyApp 向他发送推送通知的权限 在此
  • 将字符串转换为带时区的日期

    我有日期字符串2017 01 03T10 45 00 000 02 00我需要将其转移到类似的东西2017 01 03 10 45 00 0200 let formatter DateFormatter formatter dateForm
  • 尝试以紧凑模式访问 UITextView 时 iMessage 扩展程序崩溃

    下面是我在 iMessage 应用程序中的完整代码 class MessagesViewController MSMessagesAppViewController IBOutlet weak var messageView UITextV
  • Swift 3.0 将图像写入目录

    我有一个简单的ImagePicker供用户选择或拍摄个人资料照片 我想保存这个image to the Home Directory方便以后加载 问题是未设置图像类型 Save Image PPimagePicked image let i
  • 检测互联网连接并显示 UIAlertview Swift 3

    我正在制作一个应用程序 通过使用 if else 语句来检测是否有互联网连接 当有互联网时 不执行任何操作 但如果没有互联网连接 则警报视图说该应用程序需要我管理的互联网 但发现可达性在我的 viewDidLoad 上实现 uialertv
  • swift 4.0:覆盖“prepare”必须与其覆盖的声明一样可用

    我试图将 Apple 的 ARKit 示例应用程序集成到我的应用程序中 由于ARKit只是一个附加功能 所以我需要支持较低版本的iOS 我向所有 ARKit 示例应用程序类添加了 available iOS 11 0 标签 它几乎可以工作
  • 来自 URL 的 YouTube 视频 ID - Swift3

    基本上我有一个 Youtube URL 作为字符串 我想从该 URL 中提取视频 ID 我在 Objective C 中找到了一些代码 如下所示 NSError error NULL NSRegularExpression regex NS
  • Xcode 在 Swift 2.2 和 Swift 3.0 之间切换

    自从我下载了新的 Xcode 并转换 更新了我的语法以来 Xcode 一直在上述 Swift 版本之间随机切换 我在终端中运行了 swift version 它确认 目前 我正在运行 Swift 2 2 我看到这个问题 Swift 编译器混
  • XCode 8.2.1 错误 - 没有这样的模块 YouTubePlayer

    我在用https github com gilesvangruisen Swift YouTube Player https github com gilesvangruisen Swift YouTube Player 首先 我尝试从任何
  • C#中私有类的概念

    除了内部类之外 C 中是否可以存在私有类 根本不 除非它在嵌套类中 否则什么都没有 未嵌套在其他类或结构中的类和结构可以是public or internal 声明为 public 的类型可由任何其他类型访问 声明为内部的类型只能由同一程序
  • 使用多个 DispatchQueue.main.async 查看冻结

    视图冻结而数据是获取并显示 以我的理解fetchBoard and initUserInfo 不要并行执行 因为视图仅在以下情况下加载fetchBoard 加载板 我担心如果使用DispatchQueue main async多次冻结视图
  • 更改 iOS 地图中的图钉方向

    环球银行金融电信协会3 0 MKMAP视图 iOS Note 融合的AppleMap 不与GoogleMap 我做了以下事情 实现地图并将自定义图像添加到用户位置注释 当地图打开时 它会在正确的位置显示用户位置 我的要求 当用户移动到不同方
  • 无法构建 Objective-C 模块“Firebase”

    我收到此错误的原因是import Firebase 无法构建 Objective C 模块 Firebase Xcode 还抱怨 FirebaseAnalytics 说 找不到 FirebaseAnalytics FirebaseAnaly
  • 如何执行条件segue

    我通过 IB 创建了一个 segue 单击按钮时 将转换到视图 A 在按钮单击操作中 我有performSegue withIdentifier sender 包裹在一个条件中 我希望仅当条件为真时才发生 segue 但是 一旦用户单击按钮
  • 在 Swift 4 中在 Google 地图上显示路径

    我的问题是我想绘制两点之间的时间 并且我的两个位置都来自不同的控制器 for my first Location extension HomeViewController PickupLocationDelegate func didSel
  • 如何在 Safari 上打开本地 html 文件?

    我想打开本地 html 文件Safari集成到我的Swift 3应用 我知道如何使用网址来做到这一点 这是我用来执行此操作的代码 let encodedString url addingPercentEncoding withAllowed
  • Swift 3 中数组的 indexOf(_:) 方法的替换

    在我的项目 用 Swift 3 编写 中 我想使用从数组中检索元素的索引indexOf 方法 存在于 Swift 2 2 中 但我找不到任何替代方法 Swift 3 中是否有任何好的替代方法或类似的方法 Update 我忘记提及我想在自定义
  • 检查 Swift 中关联类型是否符合协议

    在类似情况下 如何检查对象是否符合 可表示 协议 protocol Representable associatedtype RepresentType var representType RepresentType get set cla

随机推荐

  • Celery 无法在 AWS ECS 中工作

    我使用 docker 将 django 项目部署到 AWS ECS 服务 为了使用 celery 我将rabbitmq 设置为单独的 ec2 服务器 两个带有代理和结果后端的 ec2 问题是 celery Worker 在本地工作 但不在
  • 如何在不同线程中使用实体框架? [复制]

    这个问题在这里已经有答案了 我有一个实体框架dbContext以及对数据库进行一些操作的方法 如何正确地从多个线程调用它以避免死锁 连接错误等 我尝试了不同的方法 但也有很多例外 public void Foo Bar bar using
  • 什么是惰性分配?

    对象的延迟分配是什么意思以及它有什么用 延迟分配简单地意味着直到实际需要资源时才分配资源 这对于单例对象来说很常见 但严格来说 只要尽可能晚地分配资源 就有一个延迟分配的例子 通过延迟分配资源直到您真正需要它 您可以减少启动时间 如果您从未
  • 近似保序霍夫曼码

    我正在做算法和数据结构课程的作业 我无法理解给出的说明 我会尽力解释这个问题 我给出的输入是一个正整数n其次是n正整数 表示有序字符集中符号的频率 或权重 第一个目标是构造一棵树 为有序字符集中的每个字符提供近似的保序霍夫曼代码 我们要通过
  • Config.h - 没有这样的文件或目录

    文件 safe read c 包含lib config h 这个文件放在哪里 我在库中找到了许多具有此名称的文件 但我不知道哪个是正确的 UPDATE 我的文件有 include
  • 使用 dplyr 跨多行修改值的更有效方法

    在学习了 R 中数据转换的基础知识后 我现在正在数据集上进行练习 我确实有四个具有相同值的变量 我想将数值修改为字符串 我在这个网站上找到了函数 case when 并将其应用到每一列 但我真的很想做得更快 数据看起来像这样 climate
  • 有哪些可用于 gtk+ 开发的 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • MySQL 查询缓存:最大缓存大小限制为 128 MB?

    我的应用程序是数据库密集型的 因此我非常努力地确保应用程序和 MySQL 数据库尽可能高效地协同工作 目前 我正在调整 MySQL 查询缓存 使其符合服务器上运行的查询的特征 query cache size是可以存储在缓存中的最大数据量
  • openpyxl - 在现有合并单元格的 Excel 文件中添加新行

    Before https i stack imgur com 20JFY png After https i stack imgur com 9d7m6 png 所以 我试图在 Excel 表中添加 6 行 我用过 openpyxl wor
  • 如何在java或clojure中等待进程结束

    当我未启动的进程结束时 如何通知我 它们是恢复其退出代码和 或输出的方法吗 执行监视的进程将以 root 管理员身份运行 您可以通过调用列出所有当前进程并解析输出的 shell 命令来检查进程当前是否正在从 java 运行 在linux u
  • 如何使用 jQuery 销毁内联 CKEditor

    假设这是我的代码 div class editor div This is working for me editor click function this ckeditor This is the problem editor on f
  • 在 C# 源代码中打破长字符串的最佳方法

    我想知道在 C 源代码中打破长字符串的 最佳实践 是什么 是这个字符串吗 string1 string2 string3 在编译期间或运行时连接 它是在编译时完成的 这与 string1string2string3 完全相同 假设您有 st
  • Django 相当于每个用户的最新条目

    我很惊讶这个问题没有被提出 在网上找不到太多 Using Entry objects latest created at 我可以恢复所有 Entry 对象的最新条目 但是如果我想要每个用户的最新条目 这类似于 SQL 最新记录查询 但是我如
  • 执行内联powershell脚本

    我正在尝试从任务计划程序调用内联 powershell 脚本 以便在触发特定事件时发送电子邮件 我无法在任务计划程序操作窗口中使用本机 发送电子邮件 操作 因为 SMTP 服务器需要 SSL 并且无法在操作窗口中指定此操作 因此 我希望 启
  • 同步集合线程安全

    我有 System Collections Generic SynchronizedCollection 共享集合 我们的代码使用 Net 4 0任务库来跨越线程并将同步集合传递给线程 到目前为止 线程尚未向集合中添加或删除项目 但是新的要
  • Java 中什么时候方法调用可以更改参数,什么时候不可以更改参数? [复制]

    这个问题在这里已经有答案了 这是在java中 我尝试在这里寻找 谷歌搜索这个问题的答案 但找不到足够的答案 所以如果这是重复的 我深表歉意 我对更改您输入的参数的方法背后的规则感到困惑 例如 考虑以下示例 public static voi
  • logback每小时回滚时删除MaxHistory之前的日志

    我使用下面的附加程序 我可以看到回滚每小时发生一次 但我提到了
  • 如何测试包含 gets.chomp 的函数?

    我有一个使用 gets chomp 的简单函数 如下所示 def welcome user puts Welcome What would you like to do action gets chomp end 我想用它来测试它ruby是
  • RAND_MAX 宏:有符号还是无符号?

    我查阅了 C 标准 从 1999 年开始 它只说RAND MAX应该至少为 32767 但没有说明该宏是否应扩展为有符号整数或无符号整数 单一 UNIX 规范 link 1 http pubs opengroup org onlinepub
  • fileprivate 和 private 扩展名之间的区别?

    斯威夫特3 0 我知道fileprivate访问级别修饰符限制对声明它的源文件的函数 属性的使用 并且private 仅限于声明的词法范围 但似乎这条规则不适用于延期 例如 此代码有效 class Foo fileprivate exten