Swift 结构体和类

2020-02-19  本文已影响0人  Arthur澪

结构体

关键字struct

struct Date {
    var year: Int
    var month: Int
    var day: Int
}

// 创建。可以传入所有成员值,用以初始化所有成员 
var date = Date(year: 2019, month: 06, day: 29)

在 Swift 标准库中,比如Bool、Int、Double、 String、Array、Dictionary等常见类型都是结构体。

如果给属性设置 可选变量,则会自动生成多个初始化器。

 struct Point {
    var x: Int?
    var y: Int?
}
// 创建。
var p1 = Point(x: 10, y: 10)
var p2 = Point(y: 10)
var p3 = Point(x: 10)
var p4 = Point()

关键字class

class Point {
    var x: Int = 0
    var y: Int = 0
}
// 创建
var point = Point()

结构体与类对比

struct Resolution {
    var width = 0
    var height = 0
}
class VideoMode {
    var resolution = Resolution()

    var interlaced = false
    var frameRate = 0.0
    var name: String?
}

Swift 中,结构体和类有很多共同点:

与结构体相比,类还有如下的附加功能:

类支持的附加功能是以增加复杂性为代价的。一般优先使用结构体,因为它们更容易理解,仅在适当或必要时才使用类。实际上,大多数自定义数据类型都会是结构体和枚举。

本质区别

结构体是值类型,类是引用类型(指针类型)

因为类是引用类型,所以多个常量和变量可能在幕后同时引用同一个类实例。判定两个常量或者变量,是否引用同一个类实例,Swift 提供了两个恒等运算符:相同===、不相同!==

由于结构体属于值类型。当值类型的实例被声明为常量的时候,它的所有属性也就成了常量。属于引用类型的类则不一样。把一个引用类型的实例赋给一个常量后,依然可以修改该实例的可变属性。

结构体和类的实例

创建了一个自定义的类型或者结构体,你需要创建与之对应的一个实例。结构体和类都使用 构造器语法 来创建新的实例。构造器语法的最简单形式是在结构体或者类的类型名称后跟随一对空括号,如:

let someResolution = Resolution()
let someVideoMode = VideoMode()

通过这种方式所创建的类或者结构体实例,其属性均会被初始化为默认值。

上一篇 下一篇

猜你喜欢

热点阅读