博客> swift中的class和struct
swift中的class和struct
2019-11-20 12:50 评论:0 阅读:1269 爱喝玉米粥
swift class struct
    我也是刚刚开始接触swift,只是看了一段代码,发现类class和结构体struct的代码是大同小异的,但是毕竟还是有一些区别的。
    类和结构体少则相同之处,多则不同之处,甚至在一些情况下,把结构体struct关键字改为类class都不会带来编译错误的。
   它们的共同点如下:
        1.它们都可以定义一些可以赋值的属性。属性的类型和写法大多相同。当然也有不同,比如类型属性的写法,在类中用class前缀,在结构体中用static前缀修饰。
        2.都可以定义具有功能性的方法,可定义方法类型也大多相同,但正如属性,对于类型方法的定义,在类中用class前缀修饰,在结构体中用static前缀修饰。
        3.都可以定义下标脚本,使用下标语法。
        4.都可以定义初始化方法来设置初始化状态,初始化属性。
        5.都可以做扩展实现。
    它们之间还存在一些不同之处:
        1.在数据结构的扩展和继承方面,类更加强大。
        2.我们可以让一个类的实例来反初始化,使之释放存储空间,但是结构体做不到。
        3.类的对象是引用类型,而结构体是值类型。
    下面给大家举个简单的小demo:

//类

class People {

    var name = ""

    init (name:String)
    {

        self.name = name

    }

}
//结构体

struct Human {

    var name = ""

    init (name:String)
    {

        self.name = name

    }

}

    let xw = People(name: "Xiaowang")

    print(xw.name)

    let p = xw

    p.name = "xiaoping"

    print(xw.name)

    let lm = Human(name: "liming")

    print(lm.name)

    var l = lm

    l.name = "liliang"

    print(lm.name)

这样输出的内容分别是:

    Xiaowang

    xiaoping

    liming

    liming

    看到输出结果大家就可以知道,类和结构体的不同之处了。在此可以看到,类、结构体在定义、初始化方法、属性定义等方面几乎完全相同,两者之间的关键字也是可以互换的。然而我们看到的不同之处是,将各自的对象赋值给新值,对新值进行修改之后,类的老值也跟着变化,而结构体的老值则没有发生改变。因此可以看出,类的赋值是传引,二结构体则是传值。

    还有不同之处就是,比如两个结构体,只要属性值都相同,我们就可以任务结构体相同,是同一个结构体。而两个类的对象,光是属性值相同,并不一定相同,不一定是类的同一个对象。

    在什么时候使用结构体或者是类?这要看你自己,在代码中科院选择类或者结构体来实现你所需要的代码块,完成相应的功能。但是结构实例传递的是值,然而类实例传递的是引用。根据不同的任务,不同的需求,可以选择不同的实例。

    一般来说:下面的一个或多个条件满足时,应当选择创建一个结构:

        1.结构主要是用来封装一些简单的数据值;

        2.当赋值或者传递的时候更希望这些封装的数据被赋值,而不是被引用过去;

        3.所有被结构存储的属性本身也是数值类型;

        4.结构不需要被另外一个类型继承或者完成其他行为。

    在其他情况下,类回事更好的选择,也就是说一般情况下,数据都会定义为类。
收藏
1
sina weixin mail 回到顶部