如何在Swift中获取值类型的引用?
值类型(如struct和enum)是按值复制的。是否可以获取值类型变量的引用如何在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 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模拟的未桥接值类型仍然可以装箱到不可变类的实例中…”谢谢!对克里斯托弗的答案和你的答案投了赞成票。选择此作为其完整性的答案。谢谢!对克里斯托弗的答案和你的答案投了赞成票。选择此作为其完整性的答案。谢谢,伟大的信息!谢谢,好消息!