如何在 Swift 中创建指向自身的静态指针变量?

2023-12-08

在 Objective-C 中,我经常使用这样的模式:static void*作为识别标签。有时这些标签仅在该函数/方法中使用,因此将变量放置在函数中很方便。

例如:

MyObscureObject* GetSomeObscureProperty(id obj) {
    static void* const ObscurePropertyTag = &ObscurePropertyTag;
    MyObscureObject* propValue = objc_getAssociatedObject(id,ObscurePropertyTag);
    if(!propValue) {
        propValue = ... // lazy-instantiate property
        objc_setAssociatedObject(obj,ObscurePropertyTag,propValue, OBJC_ASSOCIATION_RETAIN_NONATOMIC)
    }
    return propValue; 
}

问题是,怎么写ObscurePropertyTagSwift 中指向自身的私有常量指针? (最好是 2.1,但未来已经发布的版本应该没问题)

我环顾四周,看来我必须把这个ObscurePropertyTag作为成员变量,似乎没有办法解决它。


与 (Objective-)C 不同,您不能获取某个地址 Swift 中未初始化的变量。因此创建一个自引用 指针是一个两步过程:

Swift 2:

var ptr : UnsafePointer<Void> = nil
withUnsafeMutablePointer(&ptr) { $0.memory = UnsafePointer($0) }

Swift 3:

var ptr = UnsafeRawPointer(bitPattern: 1)!
ptr = withUnsafePointer(to: &ptr) { UnsafeRawPointer($0) }

出于您的目的,使用地址是否更容易global变量与&, 参见 例子

  • 有没有办法在 Swift 中设置关联对象?.

如果您想将“标签”的范围限制为函数本身 那么你可以使用static局部变量内部struct。例子:

func obscureProperty(obj : AnyObject) -> MyObscureObject {
    struct Tag {
        static var ObscurePropertyTag : Int = 0
    } 
    if let propValue = objc_getAssociatedObject(obj, &Tag.ObscurePropertyTag) as? MyObscureObject {
        return propValue
    }
    let propValue = ... // lazy instantiate property value
    objc_setAssociatedObject(obj, &Tag.ObscurePropertyTag,propValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
    return propValue
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Swift 中创建指向自身的静态指针变量? 的相关文章

  • UITableView 快速获取 titleForHeadersInSection

    我想在 UITableView 的部分中设置标题的标题 语法是什么swift设置该部分中标题的标题 func tableView tableView UITableView titleForHeaderInSection section I
  • 如何解决malloc_error_break?

    我在 iOS 3 0 模拟器上遇到此错误 但在 3 1 3 和 3 2 模拟器上没有遇到此错误 创建符号断点后malloc error break 我在日志中看到了这一点 Session started at 2010 02 13 19 1
  • 为 Swift 对象/属性设置观察者

    我一直在寻找一种在连接到 Mac 的显示器数量发生变化时触发方法的方法 我知道我可以获得 NSScreen screens count 的值 但我需要找到一种方法来在该值发生变化时创建通知或其他内容 或者指示所连接的显示器数量发生变化的其他
  • 将自定义图像设置为 UIBarButtonItem 但它不显示任何图像

    我想将自定义图像设置为 UIBarButtonItem 但它只显示周围的矩形框并且不显示实际图像 func setupBrowserToolbar let browser UIToolbar frame CGRect x 0 y 20 wi
  • 添加/删除带有动画的 UITableViewCell?

    我知道这听起来像是一个愚蠢的问题 但我到处都看过 我怎样才能做到这一点 我知道如何使用 swype to delete 方法来执行此操作 但是我如何在该函数之外执行此操作 请发布一些代码示例 Thanks Coulton self tabl
  • 调用 SwiftUI 中位置 #11、#12 处的额外参数 [重复]

    这个问题在这里已经有答案了 我在 SwiftUI 中的切换开关上不断收到 调用中位置 11 12 处有额外参数 错误 我见过其他人有 调用中的额外参数 错误 但答案似乎没有帮助 另外 我的错误是 位置 11 12 我还没有看到其他人发生这种
  • iPhone/Objective-C - 呈现视图和委托时的 UIDocumentInteractionController 类参考

    我在用UIDocumentInteractionController在我的应用程序中 以便在我的应用程序中呈现 Instagram 过滤器屏幕 如下所述 http instagram com developer iphone hooks h
  • 如何用图片替换UITableView?

    我有一个 UITableView 默认为空白 直到用户编辑并向其添加数据 我想显示一张带有说明的图像 直到用户编辑它为止 图片的大小非常适合导航栏和标签栏之间 有没有办法以编程方式执行此操作 您可以使用removeFromSuperview
  • ARC 不允许将 Objective-C 指针隐式转换为“void *”

    这意味着什么 我有什么选择 ARC 不允许将 Objective C 指针隐式转换为 void 我正在将 Xcode3 项目移植到 iOS5 它使用 AudioSessionInitialize 如下 AudioSessionInitial
  • 如何从 AFNetworking 和 AFJSONRequestOperation 获取可变字典?

    我将 JSONKit 与 AFNetworking 的 AFHTTPClient 带有 AFJSONRequestOperation 一起使用 我似乎无法弄清楚如何触发使用 JSONKit 的 mutableObjectFrom 方法 而不
  • ios 在后台处理推送通知

    我想保存应用程序处于后台状态时到达的推送通知 我知道关于 void application UIApplication application didReceiveRemoteNotification NSDictionary userIn
  • char*str={"foo",...} 和 char str[][5]={"foo",...} 数组定义之间有什么区别?

    Case 1 当我写作时 char str what is this then str i newstring 是有效的 而str i j j 是无效的 Case 2 当我写作时 char str 5 what is this then s
  • 如何在Delphi中将对象方法作为参数传递,然后调用它?

    我担心这可能是一个有点愚蠢的问题 但这让我很难过 我正在寻找将对象的方法传递到过程中的最简单的方法 以便过程可以调用对象的方法 例如 超时后 或者可能在不同的线程中 所以基本上我想 捕获对对象方法的引用 将该引用传递给过程 使用该引用 从过
  • 在 SwiftUI 中使用分段式选取器在两个页面之间滑动

    我有一个Picker with pickerStyle SegmentedPickerStyle 使其成为分段控件 我想让页面在之间平滑滑动 而不是使用条件语句替换视图 这是我迄今为止所做的 gif 这是到目前为止的代码 由if 而不是在不
  • 自定义 UITableViewCell 选择样式?

    当我点击我的UITableViewCell 当我单击单元格时 背景部分 我的背景图像未覆盖的区域 会变成蓝色 另外 所有的UILabel单击时单元格上的 s 变为白色 这就是我想要的 然而 我不想要的是当我点击它时的蓝色背景 但如果我这样做
  • 如何防止Apple Watch进入睡眠状态?

    我们正在开发一个 Apple Watch 项目 但如果不被打扰 手表就会进入睡眠状态 有什么办法可以阻止它进入睡眠状态吗 据我所知和有关该主题的其他搜索 目前还没有api可通过编程方式启用或禁用 Apple Watch 的睡眠模式
  • 频繁绘制 CGPath 时的性能

    我正在开发一个将数据可视化为折线图的 iOS 应用程序 该图被绘制为CGPath在全屏自定义中UIView最多包含 320 个数据点 数据经常更新 图表需要相应地重新绘制 刷新率为 10 秒就很好了 到目前为止很容易 然而 我的方法似乎需要
  • iPhone 和加密库

    我想我必须在我的 iPhone 应用程序中使用加密库 我想问你有关苹果公司实施的加密货币出口政策的影响 我需要做一些额外的事情吗 例如填写表格等 1 如果我使用 MD5 进行哈希处理 2 如果我使用对称加密 Thanks EDIT 2009
  • IPV6 快速可达性

    我是 swift 和 xcode 的新手 并且我的应用程序因 IPV6 而被拒绝 性能 2 1 当我们执行以下操作时 您的应用程序会在运行 iOS 9 3 5 并连接到 IPv6 网络的 iPad 和 iPhone 上崩溃 具体来说 当我们
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a

随机推荐

  • java+Swing:矩形或其他“精灵”的高效叠加

    我不太确定如何表达这一点 所以请耐心等待 我有两个JPanels 在一个容器中JPanel与OverlayLayout Both JPanel容器中的 s 覆盖paint Graphics 底端JPanel是不透明的并且绘制了一些相当复杂的
  • TextBlock 的默认高度是多少?

    在 Silverlight 和 WPF 中 TextBlock 是否有默认高度 如果有 它是什么
  • CMake 未检测到 GCC 包含标头(使用“-include”)更改

    我观察到奇怪的 CMake 行为 如果我的项目有一个头文件包含到所有源使用 include inc h借助于ADD COMPILE OPTIONS include inc h 然后命令更改为从未检测到的标头 这意味着我可以更改标头 但 CM
  • 使用 OpenCV 中的轮廓点从源图像创建图像?

    我必须在图像中找到正方形 然后创建检测到的正方形的单独图像 到目前为止 我能够检测到正方形并根据四个点获取其轮廓 Problem 当我使用 ROI 创建图像时 我也得到了不存在正方形的背景 我想删除该区域并只想保留与正方形相关的区域 你想用
  • 清理 MySQL 用户参数

    What are the dangerous characters that should be replaced in user input when the users input will be inserted in a MySQL
  • 使用脚本格式化 googlesheet 单元格中的文本

    我有一个谷歌工作表 它在单元格中格式化了文本 有些文字有颜色并且是粗体的 我使用谷歌脚本在单元格中添加新内容 当我运行脚本时 会添加新内容 但会删除旧内容的格式 1 如何在执行脚本时保留旧内容的格式 2 我想让新内容变得粗体和彩色 如何格式
  • Hive 相对于同一表中的其他数组列对数组列进行排序

    我在 hive 有一个表 有 2 列col1 array
  • 如何在 SQL Server 中不批量插入 Blob 并使用 ASP?

    我需要将文件上传到 SQL Server 数据库 我需要一个不涉及的解决方案bulk插入 Set ObjStr Server CreateObject ADODB Stream ObjStr Type 1 AdBinary ObjStr O
  • 基于目录数量的动态作业

    是否可以在 Azure DevOps 管道中创建动态作业 我有一个场景 其中我有多个用于部署的目录 目录的数量将是动态的 例如 它可以有 1 个用于部署的应用程序 也可以有多个 我想要做的是创建一个动态数量的作业 其中应该运行cd app
  • 使用 :nth-child 选择嵌套元素

    我在定位嵌套元素时遇到问题 nth child 选择器 我怎样才能瞄准第二个和第三个 service service nth child 2 styles service nth child 3 styles div class banne
  • 如何使用 Jackson 删除 Java 中的空 json 节点?

    我是一名初级 Java 程序员 所以如果我的问题有点愚蠢 我很抱歉 我有一个 JSON 对象 如下所示 element1 generated name 1 a isReady false generated name 2 generated
  • 从一个文件读取行并写入另一个文件,但删除包含特定字符串的行

    我正在尝试从文本文件中读取文本 读取行 删除包含特定字符串的行 在本例中为 坏 和 顽皮 我写的代码是这样的 infile file oldfile txt newopen open newfile txt w for line in in
  • 在 OpenCV 中使颜色完全透明

    我有一个基本的 png 文件 其中有两种颜色 绿色和洋红色 我想要做的是获取所有洋红色像素并使它们透明 以便我可以将图像合并到另一个图像中 一个例子是 如果我有一个洋红色背景上的 2D 角色的图像文件 我会删除背景中的所有洋红色 使其透明
  • 如何将可观察到的 Firebase 列表中的数据存储到数组中?

    我正在尝试使用 Angular 2 将数据从 Firebase 复制到数组 但我无法将数据推送到数组中 这是代码 变量 uid string agencyItems FirebaseListObservable
  • echo 语句中的逗号代表什么意思?

    我试图从递归函数中回显字符串 echo li node recurse arr li and echo li node recurse arr li function writeList tree if tree null return e
  • 如何转换特定时区的日期时间?

    我发现很难理解 UTC 的工作原理 我必须执行以下操作 但我仍然很困惑是否能得到正确的结果 目标 确保数据库中所有保存的日期均为 UTC 格式 更新默认时区为马尼拉时间 确保所有返回日期均为马尼拉时间 所以代码是 public Conver
  • SSIS中的数据转换

    我昨天发布了一个与数据转换相关的问题 现在我将问题重新表述如下 我有一个文本文件 其中有日期和时间作为字符串 所以我需要读取该字符串 日期 时间 并将其转换为双精度 我们可以在下面的例子中看到 Date Time Converted Dou
  • jQuery ajax 响应文本“未定义”

    我有一些 jQuery 它将两个变量发送到 php 脚本 PHP 非常简单 只是根据给定的内容返回一个字符串 即 更新成功 我想在页面上以某种方式使用它 第一次单击时 我收到一条警告 提示 未定义 任何进一步的单击都会正常工作 很确定我离得
  • 输入州和国家/地区时获取时区(在 ics 文件中使用的时区)

    在文本框中给出州和国家 地区时获取时区 有没有办法用这两个值获取那个地方的时区 输入会像 var state New York var country United States 结果应该是 美洲 纽约 OR 获取当前浏览器的本地时区 我需
  • 如何在 Swift 中创建指向自身的静态指针变量?

    在 Objective C 中 我经常使用这样的模式 static void 作为识别标签 有时这些标签仅在该函数 方法中使用 因此将变量放置在函数中很方便 例如 MyObscureObject GetSomeObscureProperty