加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

【Swift初见】Swift结构体

发布时间:2020-12-14 02:21:58 所属栏目:百科 来源:网络整理
导读:结构体struct我们应该不会陌生,从我们刚开始接触C语言的时候就一直学这个,OC中也有,swift的结构体和C和OC的结构体类似; 当我们定义一个结构体的时候,格式如下: struct Rect { var width : Double = 0.0 var height : Double = 0.0} 我们这边定义了一个

结构体struct我们应该不会陌生,从我们刚开始接触C语言的时候就一直学这个,OC中也有,swift的结构体和C和OC的结构体类似;

当我们定义一个结构体的时候,格式如下:

struct Rect {
    var width : Double = 0.0
    var height : Double = 0.0
}

我们这边定义了一个Rect结构体,里面有两个变量,初始值都为0.0,创建一个结构体实例:
var rect : Rect = Rect()

看起来是不是非常的熟悉?跟C还有OC很类似吧。

访问rect这个实例里面的width和height方法也是用点语法:

rect.width = 10
rect.height = 10

这样我们就完成了一个结构体的定义和创建一个结构体实例。

假如我们在定义结构体的时候并没有给结构体里面的变量赋初值,那么我们用不带任何参数的构造函数的时候,系统会报错,那么我们可以用带参数的构造函数,也称为逐一函数构造器:

var rect : Rect = Rect(width: 9,height: 9)

值得注意的事:逐一函数构造器的参数顺序不能调整,参数个数不能增减。


结构体的成员方法:

与C还有OC结构体不一样的是,swift的结构体可以包含成员方法,即行为,这就跟面向对象中的类的概念比较类似:

我们给刚刚Rect结构体加上一个面积的方法:

struct Rect {
    var width : Double = 0.0
    var height : Double = 0.0
    func getArea () -> Double{
        return width * height
    }
}

我们可以看出,方法的定义跟外部全局函数的定义是一样的,那么如何使用该成员方法呢?

其实调用成员变量和调用成员方法是一样的,都是用点语法:

rect.getArea()

我们在定义一个Rect类型的时候,还有另外一个定义方式:
var rect2 : Rect = rect1

rect1是一个Rect类型的变量,定义rect2等于rect1

那么rect2跟rect1是指向同一块内存空间还是单纯的值相同呢?

我们修改rect1的值,然后打印rect1和rect2:

var rect2 : Rect = rect1
rect1.width = 30
println("rect1.width=(rect1.width),rect1.height=(rect1.height)")
println("rect2.width=(rect2.width),rect2.height=(rect2.height)")

我们得到下面的输出:
rect1.width=30.0,rect1.height=20.0
rect2.width=20.0,rect2.height=20.0

所以我们得出结论:

结构体是值类型,rect2和rect1是两个不同的实例,是2块内存空间。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读