vbe*_*nar 11 struct pass-by-reference swift
如果我有一些现有的struct,但我想使用"Reference"行为,我该如何实现呢?
我可以写一些简单的类持有者
class Box<T> {
var value: T
init(_ value: T) {
self.value = value
}
}
Run Code Online (Sandbox Code Playgroud)
我想标准库中必须有现成的类,但我没有找到它.
我想在我的类中存储该引用,因此inout参数不是我需要的.
对我来说,最好的变种是使用持有者:
class Ref<T> {
var value: T
init(_ value: T) {
self.value = value
}
}
Run Code Online (Sandbox Code Playgroud)
你可以,但你不应该把它存放在你的班级.
struct Size {
var width:Float
var height:Float
}
class Rect {
var sizeRef:UnsafeMutablePointer<Size>
init(_ size:UnsafeMutablePointer<Size>) {
self.sizeRef = size
}
func doubleSize() {
self.sizeRef.memory.height *= 2.0
self.sizeRef.memory.width *= 2.0
}
}
var size = Size(width: 20.0, height: 20.0)
let rect = Rect(&size)
rect.doubleSize()
println("size: \(size.width) x \(size.height)") // -> size: 40.0 x 40.0
Run Code Online (Sandbox Code Playgroud)
因为,通常struct是从"堆栈"内存中分配的,当你这样做时:
func makeRect() -> Rect {
var size = Size(width: 20.0, height: 20.0)
return Rect(&size)
}
let rect = makeRect()
Run Code Online (Sandbox Code Playgroud)
rect.sizeRef不再指向有效记忆.从字面意义上讲UnsafeMutablePointer是不安全的.
| 归档时间: |
|
| 查看次数: |
4125 次 |
| 最近记录: |