Swift什么时候使用结构体和类

Swift中,当需要值语义(数据复制后彼此独立改变)时使用结构体,需要引用语义(共享底层资源,改变影响所有引用)时使用类。值类型在赋值或作为参数传递时会复制,而引用类型则复制引用。文章讨论了值类型和引用类型的概念,以及如何根据需求选择结构体或类,还涉及到嵌套类型的情况。
摘要由CSDN通过智能技术生成

答案其实很简单:当你需要值语义(值语义是指一个对象被系统标准的复制方式复制之后,与被复制的对象之间毫无关系,彼此独立改变且互不影响)的时候使用结构体,当你需要引用语义(引用语义是指一个对象被系统标准的复制方式复制后,与被复制的对象之间依然共享底层资源,对其中一个的改变都将影响到另外一个)的时候使用类。就是这样!

欢迎下周再来。。。

等等!

怎么了?

这没有回答这个问题

什么意思?就是这样的啊!

是的,但是。。。

但是什么?

什么是值语义和引用语义呢?

哦,这个啊。也许我接下来应该讲讲这个。

并且他们怎么和结构体和类相关联的呢?

好的。

所有的问题都归结于数据和数据被存储在什么地方。我们通常将数据存在在局部变量、参数、属性以及全局变量中。从根本上说有两种不同的方法将数据存储在所有这些地方。

值语义中,数据直接存在于被存储的位置。引用语义中,数据存在于别的地方,而存储的位置中存储着一个对数据的引用。当你获取数据的时候这种差别可能不那么明显。而当你拷贝那块存储区域时这种不同就会显现出来。值语义中,你会获的原数据的一个新拷贝,而引用语义下,你会获的同样数据的引用的一个新拷贝。

这真的很抽象。让我们来看一个例子,暂时把 Swift 的这个问题从你脑海中移除,让我们来看一个 Objective-C 的例子:

 
    
@interface SomeClass : NSObject
@property int number;
@end
@implementation SomeClass
@end
struct SomeStruct {
int number;
};
SomeClass *reference = [[SomeClass alloc] init];
reference.number = 42;
SomeClass *reference2 = reference;
reference.number = 43;
NSLog( @"The number in reference2 is %d", reference2.number);
struct SomeStruct value = {};
value.number = 42;
struct SomeStruct value2 = value;
value.number = 43;
NSLog( @"The number in value2 is %d", value2.number);\

打印结果:

 
    
The number in reference2 is 43
The number in value2 is 42

为什么会有这样的差异呢?

代码SomeClass *reference = [[SomeClass alloc] init]在内存中创建了一个新的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值