在 swift、var 和 func 中获取价值的首选方式是什么?

2023-12-13

快速获取值的首选方式是什么? 使用只读变量

var getString: String? {
    return "Value"
}

或者使用函数?

func getString() -> String? {
    return "Value"
}

另外,两者之间有性能差异吗?


首先,这两个名字都不是合适的。他们不应该开始于get。 (可可的历史意义是get前缀不是你的意思,所以即使你的意思是“到互联网上检索此信息”,你也想使用类似的东西fetch,但肯定不是你给出的情况。)

这些问题在本指南的各个部分中得到解决Swift API 设计指南。首先,属性就是属性,无论是存储的还是计算的。因此,以下两者在设计上没有区别:

let someProperty: String?

and

var someProperty: String? { return "string" }

您不应仅仅因为命名是经过计算而更改它。然后我们可以在指南中看到:

其他类型、属性、变量和常量的名称应读作名词。

此外,正如所讨论的Swift 编程语言:

属性将值与特定的类、结构或枚举相关联。存储属性将常量和变量值存储为实例的一部分,而计算属性则计算(而不是存储)一个值。

因此,如果最好将其视为与类型(其“属性”之一)关联的值,那么它应该是一个属性(计算或存储)。如果它并不是真正与类型“关联”的东西(例如调用者希望该类型从其他地方检索的东西),那么它应该是一个方法。再次来自设计指南:

记录任何非 O(1) 的计算属性的复杂性。人们通常认为属性访问不涉及大量计算,因为他们将属性存储为心理模型。当该假设可能被违反时,请务必提醒他们。

如果“作为心智模型存储的属性”与您想要表达的意思不符,那么它可能首先不应该是属性(并且如果您无论如何将其设为属性,则需要记录差异)。因此,例如,访问属性通常应该没有明显的副作用。如果您在写入属性后立即读取该属性,则应该取回您写入的值(同样,作为一般心理模型,而无需陷入多线程编程的困境)。

如果您使用某种方法,通常会产生不同的适当名称。有关更多信息,请参阅设计指南的“努力流畅使用”部分。选择好的方法名称有几个规则。作为何时使用属性与方法的一个很好的例子,请考虑x.makeIterator(), i.successor() and x.sorted()示例并思考为什么这些是方法以及为什么它们如此命名。这并不是说在所有情况下都有一个答案,但设计指南将为您提供 Swift 团队意图的示例。

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

在 swift、var 和 func 中获取价值的首选方式是什么? 的相关文章

  • 如何将自定义 C 代码放入 SwiftPM 包中?

    我正在尝试将 C 代码打包到 Swift 模块中 我们称之为CModule 一旦我将其放入项目的基本文件夹中 Swift模块 并配置了搜索路径 我可以在 Swift 文件中自动完成工作 并检测错误 警告 问题是 导入时它无法识别该模块 并且
  • 在故事板中将 UITableView 的 rowHeight 设置为 UITableViewAutomaticDimension ?

    在 Xcode 6 中创建 iOS 8 应用程序时 如何设置 UITableViewrowHeight to UITableViewAutomaticDimension In WWDC 2014 第 226 场会议 表和集合视图中的新增功能
  • ReactNative - 未处理的 JS 异常:SyntaxError

    当我尝试在 iOS 8 上启动 RUN 应用程序时 出现这个奇怪的错误 Unhandled JS Exception SyntaxError仅此而已 不再有更多信息 有any1偶然发现这个问题吗 在 iOs 9 上应用程序运行正常 x代码版
  • 在 hooks 文件夹中使用节点脚本时,cordova 插件安装问题

    Cordova 3 4 hooks 未在 iOS 中正确安装提到的插件 我正在添加install plugins js进入文件夹project project root hooks after platform add其中有以下代码 usr
  • 具有动态警报正文的快速本地通知

    所以我可以创建一个像这样的本地通知 var localNotification UILocalNotification localNotification fireDate NSDate timeIntervalSinceNow 7 loc
  • 如何在 swiftUI (macOS) 中检测按键按下和释放

    除了标题之外没什么可说的 我希望能够在按下按键和释放按键时 在 macOS 上 在 swiftUI 视图中执行操作 在 swiftUI 中是否有任何好的方法可以做到这一点 如果没有 有什么解决方法吗 不幸的是 键盘事件处理是其中一个令人痛苦
  • 从 NavigationController 中删除 ViewController 后 AVPlayer 继续播放

    因此 我在项目中使用 ARC 当我添加 AVPlayerLayer 时 它工作得很好 但当我从 UINavigationItem 中弹出 UIViewController 时 视频继续在后台播放 有谁知道你会如何处理这个问题 这似乎是一件很
  • Xcode 错误 - 架构 x86_64 的未定义符号?

    我正在运行 Swift 4 和 Xcode 9 beta 我收到此错误 但我不知道如何解决它 我什至不知道这是什么意思 Undefined symbols for architecture x86 64 T0So22AVCapturePho
  • 删除派生数据文件夹后,Xcode 不断重新创建派生数据文件夹

    自动完成功能在 Xcode 6 中不再起作用 我四处搜索 发现删除派生数据文件夹可以解决此问题 每次我删除它时 它都会回来 然后就不会再自动完成了 有什么建议么 Thanks 没关系 我解决了这个问题 我没有声明需要在类内的方法中使用的变量
  • UITableView 快速获取 titleForHeadersInSection

    我想在 UITableView 的部分中设置标题的标题 语法是什么swift设置该部分中标题的标题 func tableView tableView UITableView titleForHeaderInSection section I
  • 如何向 UIView 添加大小调整手柄?

    我试图根据用户请求在运行时动态创建视图 UIImageView 和 UITextView 然后允许用户移动它们并调整它们的大小 除了调整大小之外 我的一切都工作得很好 我尝试使用捏合手势识别器 但发现它对于我想要的东西来说太笨拙了 因此 我
  • 调用 SwiftUI 中位置 #11、#12 处的额外参数 [重复]

    这个问题在这里已经有答案了 我在 SwiftUI 中的切换开关上不断收到 调用中位置 11 12 处有额外参数 错误 我见过其他人有 调用中的额外参数 错误 但答案似乎没有帮助 另外 我的错误是 位置 11 12 我还没有看到其他人发生这种
  • 对成员“buildBlock()”的引用不明确

    我一直在尝试使用 Swift UI 为 iOS 13 制作一个应用程序 但我不断收到这个奇怪的错误 对成员 buildBlock 的引用不明确 无论我做什么 错误都不会消失 我尝试一次对代码段进行注释 以查看哪一部分可能导致了问题 但唯一有
  • 从 iOS 13 开始安排 iOS 后台任务

    我正在实现用于更新数据的BackgroundTasks 框架 但我遇到了以下问题 无法计划刷新App 错误域 BGTaskSchedulerErrorDomain代码 1 空 无法安排数据提取 Error Domain BGTaskSche
  • 从 Mac 命令行访问 iOS 应用程序目录(沙箱)

    我需要使用 Mac 或 Linux 上的命令行 非 GUI 访问 iOS 设备上安装的应用程序的沙箱目录 这有助于开发和测试自动化 将 json 文件放入沙箱中可以让我设置参数 例如额外的调试消息和更小的刷新间隔 像 iFunBox 这样的
  • 以弯曲格式显示文本

    我正在寻找以曲线格式绘制一些文本 我使用哪个控件并不重要 UITextField UILabel or UITextView 我只想显示如图所示的文本 仍在寻找解决方案 请帮忙 查看此链接 https nodeload github com
  • NSTimer 不触发选择器

    在带有 ARC 的 ios5 0 中 在我的 rootviewcontroller 中 我调用由应用程序委托持有的安全管理器对象中的方法 在该方法中 我设置计时器如下 NSTimer timer NSTimer scheduledTimer
  • 如何将 LC_LOAD_DYLIB 命令插入 Mach-O 二进制文件或将静态库加入现有二进制文件 (IOS)

    这是我第一次在 stackoverflow 上提问 我很绝望 我的任务是加载 dylib 或将静态库加入到 IOS 设备的现有可执行文件中 我将使用static void attribute constructor initialize v
  • 如何使用 Core Graphics 在我的触摸位置绘制一个圆圈?

    新程序员来了 我在尝试使用 Core Graphics 在触摸位置周围绘制描边弧时遇到问题 我有绘制圆圈的方法工作正常 并且我已经测试并在点击屏幕时注册触摸 但是当我尝试在点击时调用绘制圆圈的方法时 我收到错误 CG ContextBlah
  • 将 UIButton 中的图像缩放到 AspectFit?

    我想将图像添加到 UIButton 并且还想缩放图像以适合 UIButton 使图像变小 请告诉我该怎么做 这是我尝试过的 但它不起作用 将图像添加到按钮并使用setContentMode self itemImageButton setI

随机推荐

  • 读取文件并填充结构

    我有一个具有以下定义的结构 typedef struct myStruct int a char c int f OBJECT 我能够填充该对象并将其写入文件 但是我无法读取其中的 char c 值 在尝试读取它时 它给了我一个分段错误错误
  • 对 NSArray 进行排序并返回 NSArray?

    我只是想排序NSArray of NSNumbers按数字顺序排列 但我有点不确定最好的方法 根据我的想法 001 和 002 非常相似 所以我怀疑两者都可以 对于003我不确定是否会回归NSMutableArray当该方法期望时NSArr
  • 如何从Cassandra表中检索数据类型为“list”的列?

    我使用 Scala 与 Cassandra 连接并在其中应用查询 我在 Cassandra 中创建了一个简单的表 其中有两列 row id 和 row values row id 的数据类型为 varchar row values 存储元素
  • 如何在 Visual Studio 中关闭大括号突出显示

    在 VS 2015 中 我得到了奇怪的大括号突出显示效果 使用深色主题 当我将光标放在结束标记后面时 我会在一对大括号 括号或引号周围看到一个浅灰色框 我以为这是一个插件 但我禁用了 CodeRush 和 Productivity Powe
  • 为什么宿主元素上的伪类必须位于宿主函数内部?

    我不明白为什么伪类喜欢 focus within需要在 host 作用于主机本身时的功能括号 为什么不可以 host focus within div 更奇怪的是它还能工作 host在另一个里面 host class MyElementFa
  • Python的strip()的运行时间是多少?

    Python的strip 的运行时间是多少 由于删除单个字符的时间复杂度为 O n 那么剥离字符串的时间复杂度为 O n 2 吗 它也只是 O N 引用plain对应的代码strip它剥夺了空间 从2 7 9版本开始 Py LOCAL IN
  • 为什么 Outlook 无法保存特定类型的附件?

    我有一个小 VBA 宏 可以使用以下代码片段在 Outlook 中保存附件 For Each objAtt In objSourceItem Attachments strFile strPath objAtt FileName objAt
  • appendChild while inside for 循环无法正常工作

    我正在尝试创建一个 DIV 并使用 for 循环将其附加到页面上的所有现有 DIV 问题是 当它在 for 循环内部时 它只会将新的 DIV 添加到最后找到的 DIV 中 而不是像 FOR 循环应该做到的那样添加到每个 DIV 中 有人能告
  • curve_fit 即使在正弦波上也失败

    我正在尝试使用curve fit在我继续解决更复杂的问题之前 适合一个简单的正弦波 甚至没有任何噪声 作为测试 不幸的是 它甚至没有给出正确的答案 这是我的语法 x linspace 0 100 300 y sin 1 759 x def
  • 在RelativeLayout中从一个角到另一个角绘制对角线

    我是 Android 开发新手 我正在尝试在黄色relativelayout 内从左下角到右上角画一条线 我添加了一个layer list diagonal line
  • 为 apache 安装 mod_wsgi 模块

    当我为 APACHE 安装 WSGI 模块时 我从下载了该模块http code google com p modwsgi downloads detail name mod wsgi win32 ap22py27 3 3 so 将其重命名
  • 如何以编程方式在iPhone中使用youtube url下载youtube视频[重复]

    这个问题在这里已经有答案了 可能的重复 在应用程序中将 Youtube 视频保存到 iPhone 有没有任何 sdk 或方法可以以编程方式在 iphone 中下载带有 youtube url 的 youtube 视频 请帮我解决同样的问题
  • 将本地数据库数据同步到远程数据库

    我有一个在线运行的系统 我必须让该系统在本地主机中运行 但原来的在线系统应该每天更新一次 有谁知道有一个工具可以将本地数据库数据传输到远程数据库MySQL Use the mysqldump那是当地人mysql从数据库创建转储并在另一端恢复
  • 如果集合中的任何对象发生变异,导致其键(在比较器中使用)发生变化,PriorityQueue 是否会自行堆化?

    我只是想知道 Java 是否PriorityQueue如果比较器中使用的任何键发生变化 集合会自动堆化 或者我是否需要显式调用 heapify 来排序binary tree 我正在试验数据结构 以便在类似缓存的设置中使用它 其中集合中的对象
  • 跨多个模型搜索多个单词

    我正在尝试在网站中创建搜索功能 并且希望用户能够搜索多个单词 根据各种模型中存在的条件执行子字符串匹配 为了这个例子 假设我有以下模型 Employee Company 市政府 County 一个县有多个市 其中有多家公司 有多名员工 我希
  • 向 Zend_Auth_Adapter_DbTable 提供的参数未能生成有效的 sql 语句

    我有以下例外Caught exception The supplied parameters to Zend Auth Adapter DbTable failed to produce a valid sql statement plea
  • Ruby on Rails、Paperclip、Amazon AWS S3 和 Heroku

    我尝试了两天让我的所有网站通过 Heroku 和 Amazon AWS S3 存储我的图像 在互联网上运行 但是 我做不到 为了使其更简单 我想使用 Heroku 和 Amazon AWS S3 以及回形针来上传图片并显示它 我遵循了很多教
  • 将 FIRDataSnapshot 转换为自定义类型

    我正在尝试将 FIRDataSnapshot 转换为自定义类型 即我知道每个孩子 将有姓名 电话号码和电子邮件 当我运行下面的代码时 一个 JSON 树将打印到控制台 其中每个子项都包含名称 号码和电子邮件 因此 我想将快照存储为具有每个属
  • optaplanner 开箱即用是否支持多行程且无仓库的 VRP

    我正在开发具有以下特征的 VRP 车辆一次只能接送1位顾客 车辆在指定地点接载客户并在目的地将客户送下车 送完一位顾客后 车辆继续去接另一位顾客 车辆在两次行程之间不需要前往车库 车辆在一天内尽可能多地接送乘客 一天结束时 车辆返回指定停车
  • 在 swift、var 和 func 中获取价值的首选方式是什么?

    快速获取值的首选方式是什么 使用只读变量 var getString String return Value 或者使用函数 func getString gt String return Value 另外 两者之间有性能差异吗 首先 这两个