gpt4 book ai didi

swift - 如何通过引用分配 Swift 结构?

转载 作者:行者123 更新时间:2023-11-28 09:29:53 25 4
gpt4 key购买 nike

众所周知,在 Swift 中,类是引用对象,而其他数据类型的结构是值类型。我正在尝试将 CGRect 的引用获取到变量中,以便我可以使用更短的名称更改其值。有没有办法做到这一点?尝试使用 Objective-C 或 C++ 指针语法在这里没有用:(

let reference = someView.frame
frame = ...

如果我停留在 View 级别没关系,因为它是引用类型,但我想在引用中包含框架。

最佳答案

您可能真的不想使用引用资料……我可能是错的,您可能有充分的理由需要引用资料。但是看看你正在尝试做什么,这可能是一个更好的方法:

  1. 分配 frame您要使用的变量:

    var workingFrame = someView.frame

  2. 处理副本,进行任何您想做的更改:

    workingFrame = someNewRect

  3. 更新someView.frame到新值:

    someView.frame = workingFrame

从技术上讲,有一种方法可以直接处理指向内存地址的指针,但除非您有充分的理由去那里,否则我认为大多数人会建议您避免使用它。

[编辑:]

如果您真的想尝试使用指向内存地址的指针,那么您可能需要查看 UnsafePointer<T> , UnsafeMutablePointer<T> , unsafeBitCast:unsafeAddressOf: .这些类型和函数将为您提供指向结构的指针。

例如,您可以获得指向 Int 的可变指针像这样的值:

let x = 5

let ptr: UnsafeMutablePointer<Int> = UnsafeMutablePointer(unsafeAddressOf(x))

不鼓励以这种方式处理值、指针和内存地址,但是可以。

但是,使用 unsafeAddressOf转换 Int到一个类,所以即使那也不是真正指向原始结构的指针。您可能最终需要初始化一个 UnsafeMutablePointer ,为其分配内存,然后为该内存分配一个值。然后就可以对该内存地址的数据进行操作了。查看 UnsafeMutablePointer 的文档here.

如果您能提供更多详细信息,确切地说,您正在尝试做什么,那么可能会有一个更优雅的解决方案。 Swift 并没有让使用指针变得容易,但它通常会提供其他工具,让您能够以不同的方式完成您需要的工作。

关于swift - 如何通过引用分配 Swift 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32380135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com