前言
和其他语言不同的是,Swift不需要为自定义的类和结构体创建接口和实现文件。只需要创建单一文件用来创建类和结构体,其他的外部接口的代码系统会自动生成。下面易采站长站为您分析关于Swift 3.0类与结构体的内容,感兴趣的朋友一起来看看吧。
类和结构体区别
Swift的类和结构体具有以下相同的特点:
可以定义属性来保存值 可以定义方法来提供功能 可以定义下标来使用他们的值 可以定义初始化器来配置他们的初始化状态 可以在默认的实现上扩展他们的功能 遵从协议来提供标准的功能类具有结构体没有的额外的功能:
继承允许某一个类继承另外一个类的特性 类型转换允许你检查并在运行时解释一个类实例的类型 析构器允许释放所有该类已经赋值的实例资源 引用计数允许多个引用一个类的实例结构体一般来说赋值的时候是直接拷贝的,没有使用引用计数的机制。
符号定义
下面是一个定义结构体和类的例子:
struct Resolution {
var width = 0
var height = 0
}
class VideoMode {
var resolution = Resolution()
var interlaced = false
var frameRate = 0.0
var name: String?
}
结构体初始化的时候可以直接
let vga = Resolution(width: 640, height: 480)
这点和类不一样,类没有默认的逐个成员的初始化器。
结构体和枚举是值类型
let hd = Resolution(width: 1920, height: 1080)
var cinema = hd
再赋值
cinema.width = 2048
结果
print("cinema is now (cinema.width) pixels wide")
// Prints "cinema is now 2048 pixels wide"
然而hd.width还是1920
print("hd is still (hd.width) pixels wide")
// Prints "hd is still 1920 pixels wide"
可见赋值过程是做了一次深度拷贝。
枚举也是具有同样的行为, 如以下例子,rememberedDirection的值并没有改变:
enum CompassPoint {
case north, south, east, west
}
var currentDirection = CompassPoint.west
let rememberedDirection = currentDirection
currentDirection = .east
if rememberedDirection == .west {
print("The remembered direction is still .west")
}
// Prints "The remembered direction is still .west"
类是引用类型
例如:
let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0
进行赋值引用
let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0








