Swift 中的静态属性

2024-02-01

我正在尝试将以下 Objective-C 代码转换为 Swift。在我的 Objective-C 代码中,有一个静态变量,可以通过类方法访问它。

@implementation SomeClass

static NSMutableArray *_items;

+ (void)someMethod {
    [_items removeAll];
}

@end

因为您无法访问这样声明的类型private var items = [AnyObject]()从 Swift 中的类函数,我为它创建了一个存储属性,如下所示。

class var items: [AnyObject] {
    return [AnyObject]()
}

我试图从类函数中调用它的方法,如下所示。

class func someFunction() {
    items.removeAll(keepCapacity: false)
}

但我收到这个错误“[AnyObject]”类型的不可变值仅具有名为“removeAll”的可变成员.

谁能告诉我这个错误的原因是什么以及如何纠正它?

谢谢。


有了这个代码:

class var items: [AnyObject] {
    return [AnyObject]()
}

您没有创建一个存储属性 - 相反,它是一个计算属性,最糟糕的是,每次访问它时,都会创建一个新实例[AnyObject]已创建,因此无论您向其中添加什么,一旦其引用超出范围,它就会丢失。

至于错误,静态计算属性返回您在其主体中创建的数组的不可变副本,因此您不能使用任何声明为的数组方法mutating - and removeAll是其中之一。之所以是不可变的,是因为你定义了一个getter,但没有定义一个setter。

目前 Swift 类不支持静态属性,但结构支持 - 我经常使用的解决方法是定义一个内部结构:

class SomeClass {
    struct Static {
        static var items = [AnyObject]()
    }
}

SomeClass.Static.items.append("test")

如果你想摆脱Static每次引用时都会构造items属性,只需定义一个包装器计算属性:

class var items: [AnyObject] {
    get { return Static.items }
    set { Static.items = newValue }
}

以便可以更简单地访问该属性,如下所示:

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

Swift 中的静态属性 的相关文章

  • Apple Mach-O 链接器错误(静态,不是 ld)

    我最近遇到了 Apple Mach O 链接器错误 大多数指南建议将 构建设置 中的位码更改为 否 但它仅适用于 ld 错误 这与我的不同 我会提供截图 请帮忙修复bug pod HandySwift 导致了错误的出现 这是它的 Githu
  • 如何检测用户是否第一次打开应用程序[重复]

    这个问题在这里已经有答案了 是否可以检测用户是否是第一次打开iOS应用程序 使用Objective C 我想在用户第一次打开应用程序时显示欢迎消息 但之后不再向他们显示 我正在寻找类似的东西 BOOL firstTime AppDelega
  • SwiftUI 意外地自动弹出 NavigationLink

    我有一个简单的用例 其中一个屏幕使用 NavigationLink 推送另一个屏幕 iOS 14 5 有一个奇怪的行为 即推送的屏幕在被推送后立即弹出 Code NavigationLink destination EmptyView Em
  • 如何为 iPhone 6+、6 和 5 指定不同尺寸?

    我想让 iPhone 6 6 和 5 上的视图看起来几乎相同 在附图中 我的意思是 例如 取消 按钮在 iPhone 5 中距离屏幕左边缘应为 30 像素 在 6 中为 35 像素 在 6 中为 45 像素 其他元素也类似 如何为每种类型设
  • 在 iOS 应用程序中拨打电话

    我有一些代码尝试在应用程序中进行调用 但它似乎不起作用 UIApplication myApp UIApplication sharedApplication NSString theCall NSString stringWithForm
  • Swift:设置协议的可选属性

    如何设置协议的可选属性 例如 UITextInputTraits 有许多可选的读 写属性 当我尝试以下操作时 出现编译错误 无法分配给 textInputTraits 中的 keyboardType func initializeTextI
  • 在 iOS 7 中 viewForHeaderInSection 部分是从 1 开始而不是从 0 开始

    我正在处理UITableView在我的项目中 这个项目是在 Xcode 4 5 中创建的 现在我正在使用 Xcode 5 所以我的问题是何时在 iOS 6 中运行我的项目 viewForHeaderInSection方法部分从 0 开始没问
  • jQuery:离线后 POST 出错(iOS 和 Chrome)

    我构建了一个具有离线功能的 HTML5 Web 应用程序 使用 AppCache 程序流程为 Online 在网络上时 应用程序预加载一些基本信息 工作 Offline 用户拿着装有应用程序的平板电脑offline 然后在应用程序上执行他们
  • 如何删除 UITableView 中的缩进?

    首先 我对此很陌生 我很可能忘记了一些非常简单的事情 问题 我正在制作一个应用程序 在 a 中显示来自 imgur com 的随机图像tableView 由于某种原因 所有单元格都会缩进少量 如下图所示 我摆弄了许多设置storyboard
  • 如何使用phonegap在iOS应用程序中防止键盘推送webview

    当屏幕底部的输入字段获得焦点时 键盘会向上推我的网络视图 并且页面的上部不再可见 我想防止键盘推高网络视图 有人有主意吗 对焦 设置window scrollTo 0 0 这可以防止键盘完全推高 webview input on focus
  • CATextLayer 上 iOS 6 中不需要的垂直填充

    背景 我在 iOS 5 中开始了我的项目 并构建了一个带有图层的漂亮按钮 我在按钮上添加了一个 textLayer 并使用以下代码将其居中 float textLayerVerticlePadding self bounds size he
  • 使用 UITabBarController 时覆盖整个屏幕的视图?

    我想在 UITabBarController 设置中在整个屏幕上覆盖 HUD 样式的透明图形 执行此操作的按钮位于第一个选项卡的屏幕 FirstViewController 中 并且覆盖层也应该覆盖选项卡 这可能吗 您可以将新视图直接附加到
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 在 Objective-C 中的 Swift 类上调用 NSStringFromClass 返回模块损坏的名称

    我知道这个问题 https stackoverflow com questions 24107658 get a user readable version of the class name in swift in objc nsstri
  • UICollectionView setLayout:animated: 不保留 zIndex

    我注意到打电话时setLayout animated in a UICollectionView要在两个布局之间切换 当前可见的单元格不遵循zIndex它的布局属性已设置在layoutAttributesForItemAtIndexPath
  • 诊断和仪器均缺少“僵尸”选项

    运行 Xcode 4 0 2 Zombie 选项丢失 其他 SO 帖子建议找到它的两个地方 Product gt Run looks like this Product gt Profile looks like this 奇怪的是 我之前
  • UIViewController 内的 UIsearchController 使用自动布局

    有没有人成功实施过UIViewController其中包含两个UISearchController searchBar and a UItableView使用自动布局来布局所有内容 我正在尝试实现类似的目标1密码 https itunes
  • 在 Object 子类及其自己的子类上实现ignoreProperties()

    我是领域新手 我正在使用继承自 Object 的基类以及该基类的自定义子类创建模型 我的模型要求基类通过覆盖静态来声明一些属性被忽略ignoredProperties 方法 当尝试在某些基类子类上重写该方法时 我收到一个 Swift 编译器
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 如何在 UITableView 的 switch 语句中创建变量?

    我正在构建一个包含三个部分的 tableView 我已经完成了前两个工作 但最后一个有点阻力 我的问题似乎涉及尝试在 switch 语句中声明变量 实际上是嵌套的 switch 语句 据我所知 这不是一个好主意 但在这种情况下 这似乎是唯一

随机推荐

  • 有关编写 Debian/Ubuntu deb 软件包的资源? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开始为 Ubuntu 服务器上的软件包准备安装脚本 我想编写一个脚本作为 deb 包 它知道必须
  • Node.js:在继续之前在循环中等待回调

    我有一个循环 里面有一个异步调用和一个回调 为了能够继续 我需要回调在整个循环中一直触发 然后显示循环的结果 我尝试过的各种控制方法都行不通 已经尝试过 Step Tame js async js 等 关于如何继续前进有什么建议吗 arra
  • 计算经过三个数组的最短路径

    我有三个数组 也可能是n个 现在让我们举三个 他们有这样的价值观 Array1 143 181 Array2 41 153 241 Array3 22 67 131 190 我想找到这三个数组中的那些元素 谁的差异最小 在本例中 143 1
  • 我在 sdk 管理器中找不到“Android SDK 文档”

    我有一个问题 它是关于找到 Android SDK 的文档 我在谷歌和这个网站中搜索 我找到了关于这个问题的解决方案topic https stackoverflow com questions 15748558 android devel
  • Java - 如何获取 JSON 数组中的对象值?

    我有一个类似于下面示例的 JSON 我正在尝试获取一些值 例如值 results shipper id results updated false notification false some data id 15989 pieces 0
  • 通过管道 $_POST 到外部命令

    我有一个程序可以读取 JSON 请求stdin 我想用 PHP 调用它 这就是我现在所拥有的 这可行 但是有没有更直接的方法将 PHP 中的字符串放入stdin 类似的东西pipe json encode POST JSON NUMERIC
  • jquery html() 去掉脚本标签

    我需要用 ajax 调用生成的 html 替换页面中 div 的内容 问题是 html 中有一些必要的脚本 并且 jquery html 函数似乎将它们删除了 我需要过滤响应并只获取特定的 div 我正在考虑一种解决方法 即从 ajax 响
  • 返回 JSON 无法正常工作

    我正在尝试从数据库返回数据并将其转换为 json 并将其发送回我的 javascript 然而它并没有按计划工作 它在 JavaScript 上作为数组返回 JavaScript function getData id ajax url s
  • 如何获得两列之间的差异

    我有一个查询生成如下内容 StartTimestamp EndTimestamp 100 450 150 500 我希望结果还包括 EndTimestamp 和 StartTimestamp 之间的差异 StartTimestamp End
  • 如何使用 Windows Installer XML 注册 COM 对象

    我遇到以下问题 在我的 WiX 设置中 我需要注册一个 COM 对象 我有一个 tlb 文件和一个 dll 文件 在我的示例中 XYCommon dll 和 XYCommon tlb 现在我想要进行设置以注册 TLB 如何在 Windows
  • 隐藏自动生成的 CTest 目标

    我在 CLion 中使用 CMake 和 CTest 令人烦恼的是 CTest 生成了大量我不关心的目标 连续的 持续构建 连续配置 持续覆盖 连续内存检查 连续启动 连续提交 连续测试 持续更新 实验性的 实验构建 实验配置 实验覆盖范围
  • 如何使用 VSCode 调试器来调试 Gunicorn 工作进程?

    我有一个在 Ubuntu 14 04 上用 Python 3 4 编写的 GUnicorn Falcon Web 服务 我想使用 VSCode 调试器来调试此服务 我目前使用命令启动该进程 usr local bin gunicorn co
  • 水平滑动手势和垂直页面滚动

    我正在构建一个移动网站 并且有一个图像幻灯片放映 允许水平滑动图像 我使用的 javascript 库是 bxslider 然而 如果用户触摸幻灯片并想要向上 向下滚动页面 则幻灯片会阻止垂直滚动 因此必须触摸网站的另一部分 有人可以告诉我
  • 错误:未知命令:木桶 ||尽管使用了多实例试验

    我已经无能为力了 我不断收到错误消息Error Unknown command cask尽管我之前已经通过此链接使用了很多不同的安装 自制木桶选项无法识别 https stackoverflow com questions 30413621
  • 如何在sass中使用循环生成多个mixin(mixin lib)

    我想保持我的 sass 代码简短 代替 mixin tg font size line height something related to font size and line height mixin h1 include tg mi
  • 在运行时创建类时,使用 exec 相对于 type() 有什么优势?

    我想在 python 中在运行时动态创建类 例如 我想复制下面的代码 gt gt gt class RefObj object def init self ParentClassName print Created RefObj with
  • THREE.js 对单个 > 500k 多边形(面)对象、与地球的线相交的光线投射非常慢

    在我的项目中 我让一名玩家环游世界 地球不仅仅是一个球体 它还有山脉和山谷 所以我需要改变玩家的 z 位置 为此 我从玩家的位置向单个对象 地球 投射一条光线 并得到它们相交的点并相应地改变玩家的位置 我仅在玩家移动时进行光线投射 而不是在
  • 如何使用 R CMD BATCH 抑制行号输出?

    如果我有一个 R 脚本 print hi commandArgs 我使用以下命令运行它 r CMD BATCH slave no timing test r output txt 输出将包含 1 hi 1 Library Framework
  • 从调用者的角度发出警告(又名 Python 相当于 Perl 的鲤鱼)?

    简洁版本 有没有办法在Python中达到Perl所达到的相同效果Carp carp http perldoc perl org Carp html公用事业 长版 对于那些不熟悉的人Carp carp 假设我们正在实现一些库 API 函数 即
  • Swift 中的静态属性

    我正在尝试将以下 Objective C 代码转换为 Swift 在我的 Objective C 代码中 有一个静态变量 可以通过类方法访问它 implementation SomeClass static NSMutableArray i