swift:类、结构体、枚举、数组

一、类和结构体

Swift中的类和结构体相同点:

  1. 都拥有属性,方法
  2. 都能遵守协议,实现拓展

不同点:

  1. Class可以继承,struct不能
  2. class是引用类型,struct是值类型
  3. class没有默认的 成员逐一构造器,struct有

枚举:也拥有属性,方法,协议,拓展,和结构体一样是值类型,枚举还拥有关联值等特征

结构体和类最大的区别就是struct是值类型,class是引用类型。
所以他们给变量赋值时,class是增加一个引用,struct是将对象复制一份给变量(这里涉及到swift的 写时复制技术

数据结构
值类型结构体、枚举、元组(tuple)
基本类型(Int,Double,Bool等)
集合(Array, String, Dictionary, Set)
引用类型类(class)
闭包

二、元组

元组的简单使用

let ob = (age:22,name:"dsd");
print("age:\(ob.age) name:\(ob.name)");

let ob1 = (22,"dsd");
print("age:\(ob1.0) name:\(ob1.1)");

元组和结构体有点相似,都是一种可以存储不同各类型的的结构

需要临时组合一些相关值的时候,元组非常有用。如果数据结构需要在临时范围之外仍然存在。那就把它抽象成类或者结构体

三、数组

数组的创建

数组的创建有几种形式:

  1. 指定类型的创建
  2. 不指定类型(其实是编译器默认类型是Any类型)

数组的值由方括号组成,里面的元素用逗号隔开。如果方括号改成了圆括号,编译器不会报错,而是会把它变成元组

var arr3:Array<String> = ["1","23"];
arr3.append("44");

var arr2:[Int] = [1,23];
arr2.append(44);

var arr1 = ["ob",23] as [Any];
arr1.append(("元组",44));

不指定类型创建,可以给数组添加不同类型的元素

题外话:Swift中可以在NSArray与Array之间做无缝的转换

NSArray是类类型,而Array是结构体类型。一个是引用类型,一个是值类型,它们是怎样实现无缝转换的呢?

如果我们自己实现这个功能呢?

那就是遍历,创建一个oc数组,遍历swift的数组,将里面的元素一个一个添加到oc的数组。

在Swift中,Apple已经帮我们完成了大部分的工作。如果需要实现自定义的结构体类型与Objective-C类的切换,则可以让结构体实现_ObjectiveCBridgeable接口。

总结:
通过分析 String 和 Array 我们发现,平时我都知道他们是值类型,但是通过汇编窥探发现,String也有存放在堆空间的情况, Array就是放在堆空间的,这不是和Swift说的 值类型冲突了吗? 并不是这样,底层实现是苹果官方的做法,他把数组设计成引用类型,只限于在底层的实现 , 但是对于我们使用着 String 和 Array的人来说, String 和 Array行为表现官方定义它就是表现为值类型,我们开发者看到String 和 Array ,就知道是值类型,把它当做值类型来用。 见这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值