swift 引用其他文件的struct swift 值类型和引用类型

admin2024-06-04  9

最近在swit的开发过程中,碰到了一个糗事,定义一个新的变量去接收我数据请求返回的model,而该model是用struct定义的,结果在对新的变量进行值的修改后,发现原来的model数据并没有修改,也就是说做了一次深拷贝操作。问题解决后,对于 Swift 中的 struct,class 以及 enum 在一般的使用中能够做到互相替换

由于 Swift 中的 struct 为值类型,class 为引用类型,因此文中以这两种类型为代表来具体阐述

stack & heap

内存(RAM)中有两个区域,栈区(stack)和堆区(heap)。在 Swift 中,值类型,存放在栈区;引用类型,存放在堆区。

值类型 & 引用类型

1 值类型

值类型,即每个实例保持一份数据拷贝

在 Swift 中,典型的有 struct,enum,以及 tuple 都是值类型。而平时使用的 Int, Double,Float,String,Array,Dictionary,Set 其实都是用结构体实现的,也是值类型。
Swift 中,值类型的赋值为深拷贝(Deep Copy),值语义(Value Semantics)即新对象和源对象是独立的,当改变新对象的属性,源对象不会受到影响,反之同理

struct MHFStruct {
    var x : Double
    var y : Double
}
  var cordA = MHFStruct(x: 3, y: 4)
        var cordB = cordA
        
        cordA.x = 1000
        print("cordA.x ->\(cordA.x)")
        print("cordB.x->\(cordB.x)")
        
        
        withUnsafePointer(to: &cordA, {print("\()")})
        withUnsafePointer(to: &cordB, {print("\()")})
        
  
 
        /**
         cordA.x ->1000.0
         cordB.x->3.0
         0x00007ffee92897c0
         0x00007ffee92897b0
         */

在 Swift 3.0 中,可以使用 withUnsafePointer(to:_

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!