private(set) 与 let 属性 - 'private(set)' 修饰符不能应用于只读属性

2024-01-08

我已经知道如何private(set)作品。但下面的代码给出了编译时错误,

class Person {
    private(set) let name: String //Error.
    private(set) let age: Int //Error.

    init(name: String, age: Int){
        self.name = name
        self.age = age
    }
}

Error:

“private(set)”修饰符不能应用于只读属性

Since name and age不是只读属性,它不应该给出这样的错误。

如果我使用let代替var,工作正常。只是想知道为什么?


private(set) let是一个自相矛盾的术语。任何二传手都需要variable.

请注意,为属性分配默认值不是set根据初始化设置属性。为此didSet为属性分配默认值后不会调用属性观察器。

在 Swift 中只有one使用案例private(set):如果类包含修改变量的代码

class Foo {
    let name : String
    private(set) var expiryDate : Date

    init(name: String, expiryDate: Date){
        self.name = name
        self.expiryDate = expiryDate
    }

    func extendExpiryDate(to newDate : Date) {
       expiryDate = newDate
    }
}

如果该属性仅在期间初始化init它是一个常量 - 正如其他答案中正确提到的那样 - 所以将其声明为let持续的。与其他编程语言不同,Swift 提供显式常量,具有更高的安全性、更少的内存使用量和更好的性能。

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

private(set) 与 let 属性 - 'private(set)' 修饰符不能应用于只读属性 的相关文章

随机推荐

  • 如何防止鼠标监听器暂时出现在窗口上?

    我正在用 Java 编写一个游戏 这是我试图做得 漂亮 的第一个游戏 这款游戏名为 Bantumi 这是一款棋盘游戏 现在我正在为动作编写动画 问题是 当运动动画运行时 板仍然会获取鼠标事件 如果用户选择新的运动 则正在运行的运动将被丢弃
  • FileProvider“无法找到配置的根”异常

    这些 FileProvider 又一个失去了灵魂 我已经在这个问题上工作了一天多了 看来我错过了一些大东西 任何帮助 将不胜感激 我正在尝试使用 FileProvider 发送带有附件的电子邮件 我的 AndroidManifest xml
  • 将会话中保存的数组中的多行插入表中?

    我使用一个插入命令通过 php 将存储在会话变量中的多个状态值传递到 MySQL 表中 我想知道是否可以将每个状态值插入到不同的行中 我还有一个 ID 保存在变量中 我想将其与每个状态一起插入 campaign id 每个状态都存储在该会话
  • 匹配 foo 或 bar vim 正则表达式

    有没有一种方法可以同时匹配多个单词vim搜索和替换 就像是 s foo bar g 寻找foo or bar并替换为任何内容 这会搜索模式foo bar 这不是我想要的 我可以搜索多个人物这边走 abcdef s ace g 结果是 bdf
  • 有没有办法在开发时只刷新 javascript include ?

    在 js 文件上进行开发时 我只想刷新该文件而不是整个页面以节省时间 有人知道这方面的技术吗 这是创建新脚本元素的函数 它附加一个递增的整数以使脚本的 URL 唯一 如 Kon 建议 以便强制下载 var index 0 function
  • Laravel 4 Auth::attempt() 总是返回 false

    我正在尝试 Laravel 的 Auth 类 但每次我尝试登录用户时 该方法都会返回 false 这是我的代码 路线 php Route get new user function return View make register Rou
  • 使用Fisher方法matlab组合P值?

    完成 CDF 后 我收到了以下值P 其中的样本 0 43 0 12 0 0021 0 05 0 017 0 001 0 025 0 038 0 35 0 29 我想结合我的P值的帮助下Fisher https en wikipedia or
  • 基于json输入绘制网络拓扑图

    我想通过证明 json 数据作为输入 使用 Highchart 或任何其他 js 库绘制网络拓扑图 在查看示例时http www highcharts com demo renderer http www highcharts com de
  • 设置滚动条拇指大小

    我正在尝试计算与 WPF 滚动条拇指元素大小相关的算法 拇指元素的大小可以使用Scrollbar ViewportSize属性 但又与Scrollbar Minimum and Scrollbar Maximum价值观 到目前为止我发现的是
  • android 从加速度计读数中删除重力

    我正在开发一个 Android 应用程序 我需要从加速度计读数中消除重力 我已经阅读了关于这个问题的多个讨论 我还找到了一个算法here http developer android com reference android hardwa
  • pandas 中给定日期的季度天数

    我创建了一个日期数据框 如下所示 import pandas as pd timespan 366 df pd DataFrame Date pd date range pd datetime today periods timespan
  • 在 Keras 中实现 Rprop 算法

    我正在尝试为 Keras 实现弹性反向传播优化器 link http www inf fu berlin de lehre WS06 Musterererkennung Paper rprop pdf 但具有挑战性的部分是能够根据每个单独的
  • 何时使用 SortedList 而不是 SortedDictionary

    这可能看起来与此重复question https stackoverflow com questions 935621 whats the difference between sortedlist and sorteddictionary
  • 为结构字段分配默认值[重复]

    这个问题在这里已经有答案了 我想为 Go 中的结构字段分配默认值 我不确定是否可能 但在创建 初始化结构的对象时 如果我没有为该字段分配任何值 我希望它从默认值分配 知道如何实现它吗 type abc struct prop1 int pr
  • 从两个向量中采样唯一对

    给定两个向量 a and b a letters 1 6 b letters 7 11 目标是使用以下方法对两列矩阵进行采样a and b 第一列应包含以下元素a使得每个元素a重复两次 第二列应包含以下元素b使得每个元素b也重复至少两次 还
  • 如何将 pandas 数据框显示为数据表?

    我想显示一个表 这是一个 pandas 数据框 作为数据表 https datatables net examples data sources dom html 在下面的简化示例中 我读取了用户提供的两个数字 它们确定了表格的行号和列号
  • 如何在 CodeIgniter 中获取 show_error() 来加载视图?

    我需要在所有页面中加载头部视图和脚部视图 但show error使用自己的完整模板 它在加载此模板后停止执行 因此如果我愿意 页脚甚至不会加载 我应该重写这个方法还是有其他方法 所以 我就是这样做的 而且效果非常好 我延长了CI Excep
  • 为什么元胞数组中的尾随逗号是有效的 Matlab 语法?

    今天我很惊讶地发现 A 1 2 3 and B 1 2 3 都是 MATLAB 中的有效语法 我原以为第二个语句会产生错误 据我所知 它们产生相同的单元阵列 all A B 返回真 允许使用第二种语法有什么原因吗 这是解析器中的错误吗 是A
  • ggplot 抛出错误“找不到标签”,而“标签”显然在那里

    我可以绘制以下标签df using geom text df lt data frame x c 610 426 569 253 y c 226 276 364 185 label c accomplishments per week ho
  • private(set) 与 let 属性 - 'private(set)' 修饰符不能应用于只读属性

    我已经知道如何private set 作品 但下面的代码给出了编译时错误 class Person private set let name String Error private set let age Int Error init n