如何在Swift中获取值类型的引用?

如何在Swift中获取值类型的引用?,swift,Swift,值类型(如struct和enum)是按值复制的。是否可以获取值类型变量的引用 struct Test {} let t = Test() let s = t // How to get a reference to t instead of a copy of t? 典型的解决方案是使用框引用类型来包装值类型。例如: final class Box<T> { let value: T init(_ value: T) { self.value

值类型(如struct和enum)是按值复制的。是否可以获取值类型变量的引用

struct Test {}

let t = Test()
let s = t  // How to get a reference to t instead of a copy of t?

典型的解决方案是使用
引用类型来包装值类型。例如:

final class Box<T> {
    let value: T

    init(_ value: T) {
        self.value = value
    }
}

let t = Test()
let boxed = Box(t)
let anotherReference = boxed
let theValue = anotherReference.value
最终类框{
let值:T
初始值(u值:T){
自我价值=价值
}
}
设t=Test()
装箱=箱(t)
让另一个引用=装箱
让value=另一个reference.value

有关更多信息,请参阅。

典型的解决方案是使用
引用类型来包装值类型。例如:

final class Box<T> {
    let value: T

    init(_ value: T) {
        self.value = value
    }
}

let t = Test()
let boxed = Box(t)
let anotherReference = boxed
let theValue = anotherReference.value
最终类框{
let值:T
初始值(u值:T){
自我价值=价值
}
}
设t=Test()
装箱=箱(t)
让另一个引用=装箱
让value=另一个reference.value

有关更多信息,请参阅。

获取参考资料有多种方法。Kristopher的
Box
解决方案是最灵活的解决方案之一,可以构建为一个自定义框来处理诸如将结构传递给ObjC之类的问题

除此之外,最明显的是传递
inout
参数。这与引用并不完全相同,但其行为可能非常相似,并且肯定可以成为高性能代码的一部分

向下移动堆栈的是
UnsafePointer
及其朋友,在常规类型上使用
with UnsafePointer(to:)
,在数组类型上使用
with unsafebufferpointer

但是,如果您需要一个可以存储在属性中的持久引用类型,则需要一个
框,正如Kristopher所描述的那样


(只是为了给以后的读者捕捉它,因为我不记得了,但Martinar在一篇评论中指出:
,因为任何对象
都可以自动框选值类型。)

获取引用有几种方法。Kristopher的
Box
解决方案是最灵活的解决方案之一,可以构建为一个自定义框来处理诸如将结构传递给ObjC之类的问题

除此之外,最明显的是传递
inout
参数。这与引用并不完全相同,但其行为可能非常相似,并且肯定可以成为高性能代码的一部分

向下移动堆栈的是
UnsafePointer
及其朋友,在常规类型上使用
with UnsafePointer(to:)
,在数组类型上使用
with unsafebufferpointer

但是,如果您需要一个可以存储在属性中的持久引用类型,则需要一个
框,正如Kristopher所描述的那样


(只是为了给未来的读者捕捉它,因为我不记得了,但Martinar在评论中指出:
因为任何对象
都可以自动框选值类型。)

为什么需要引用?用例是什么?一个非常奇怪的问题。值类型是您希望通过值传递的类型。如果您需要引用,请使用引用类型。在Swift 3中,当转换为
AnyObject
时,值类型是“自动装箱”的。相关::“没有明显Objective-C模拟的未桥接值类型仍然可以装箱到不可变类的实例中…”您为什么需要引用?用例是什么?一个非常奇怪的问题。值类型是您希望通过值传递的类型。如果您需要引用,请使用引用类型。在Swift 3中,当转换为
AnyObject
时,值类型是“自动装箱”的。相关::“没有明显Objective-C模拟的未桥接值类型仍然可以装箱到不可变类的实例中…”谢谢!对克里斯托弗的答案和你的答案投了赞成票。选择此作为其完整性的答案。谢谢!对克里斯托弗的答案和你的答案投了赞成票。选择此作为其完整性的答案。谢谢,伟大的信息!谢谢,好消息!