美文网首页iOS开发常用知识点
Swift中struct和class的区别

Swift中struct和class的区别

作者: Carson_Zhu | 来源:发表于2018-02-13 01:26 被阅读38次

Swiftstructclass有什么不一样的地方?首先要先和大家提到一个观念,值类型ValueType和引用类型ReferenceType。其中 structValueTypeclassReferenceType

值类型的变量直接包含他们的数据,而引用类型的变量存储对他们的数据引用,因此后者称为对象,因此对一个变量操作可能影响另一个变量所引用的对象。对于值类型都有他们自己的数据副本,因此对一个变量操作不可能影响另一个变量。

  • 定义一个struct
struct SRectangle {
 var width = 200
}
  • 定义一个class
class CRectangle {
 var width = 200
}
1. 成员变量
struct SRectangle {
    var width = 200
    var height: Int
}
class CRectangle {
    var width = 200
    var height: Int // 报错
}

解释:
struct定义结构体类型时其成员可以没有初始值,如果使用这种格式定义一个类,编译器是会报错的,他会提醒你这个类没有被初始化。

2. 构造器
var sRect = SRectangle(width: 300)
sRect.width // 结果是300
var cRect = CRectangle()
// 不能直接用CRectangle(width: 300),需要构造方法
cRect.width // 结果是200

解释:
所有的struct都有一个自动生成的成员构造器,而class需要自己生成。

3. 指定给另一个变量的行为不同
var sRect2 = sRect
sRect2.width = 500
sRect.width // 结果是300
var cRect2 = cRect
cRect2.width = 500
cRect.width // 结果是500

解释:
ValueType每一个实例都有一份属于自己的数据,在复制时修改一个实例的数据并不影响副本的数据。而ReferenceType被复制的时候其实复制的是一份引用,两份引用指向同一个对象,所以在修改一个实例的数据时副本的数据也被修改了。

4. 不可变实例的不同
let sRect3 = SRectangle(width: 300);
sRect3.width = 500 // 报错
let cRect3 = CRectangle()
cRect3.width = 500

解释:
struct对于let声明的实例不能对变量进行赋值,class预设值是可以赋值let实例的。注意Swift中常用的StringArrayDictionary都是struct

方法
struct SRectangle {
    var width = 200
    mutating func changeWidth(width: Int) {
        self.width = width
    }
}
class CRectangle {
    var width = 200
    func changeWidth(width: Int) {
        self.width = width
    }
}

解释:
struct的方法要去修改property的值,要加上mutatingclass则不需要。

继承

struct不能继承,class可以继承。

相关文章

  • iOS知识点总结(面试向)更新中

    Swift 1.Swift中struct和class的区别 Swift中struct和class有什么不一样的地方...

  • swift我们应该知道的

    1.class 和 struct 的区别? swift中,class是引用类型,struct是值类型。值类型在传递...

  • iOS面试题

    1. struct和class的区别 swift中,class是引用类型,struct是值类型。值类型在传递和赋值...

  • 一些概念的理解

    1. struct和class的区别 swift中,class是引用类型,struct是值类型。值类型在传递和赋值...

  • 答卓同学的iOS面试题

    1. struct和class的区别 swift中,class是引用类型,struct是值类型。值类型在传递和赋值...

  • swift小问题

    1、struct和class的区别 swift中,class是引用类型,struct是值类型。值类型在传递和赋值时...

  • iOS开发NSString的常用方法总结

    1. struct和class的区别 swift中,class是引用类型,struct是值类型。值类型在传递和赋值...

  • Swift理论相关

    类(Class)和结构体(Struct)有什么区别 在swift中,class是引用类型.struct是值类型.值...

  • iOS面试题 - Swift语言

    1、类(class)和结构体(struct)有什么区别? 在Swift中,class是引用类型,struct是值类...

  • 面试题二

    Swift 1、Swift中struct和class有什么区别? struct是值引用,更轻量,存放于栈区,cla...

网友评论

    本文标题:Swift中struct和class的区别

    本文链接:https://www.haomeiwen.com/subject/tuadtftx.html