感谢作者
https://www.jianshu.com/p/ceedc973be3e
struct Resolution {
var width = 0
var height = 0
}
class VideoMode {
var resolution = Resolution()
var interlaced = false
var frameRate = 0.0
var name: String?
}
// 结构体和类
// 我们可以使用与定义常量,变量和函数相同的语法来定义属性和方法,
// 为我们的结构体和类添加功能
// 比较结构体和类
// 相同点:
// 定义属性
// 定义方法
// 定义下标
// 定义初始化方法
// 可以被扩展 extend
// 可以遵守协议
// 不同点:
// 类可以
// 继承
// 类型转换
// 析构函数(Deinitializers)
// 引用计数
// 语法定义
/**
struct SomeStructure {
}
class SomeClass {
}
*/
var someResolution = Resolution();
var someVideoMode = VideoMode();
// 属性访问
let width1 = someResolution.width;
let width2 = someVideoMode.resolution.width;
someResolution.width = 250;
someVideoMode.resolution.width = 255;
// 结构体类型的成员初始化方法
// 所有结构体都有一个自动生成的初始化方法
var someResolution2 = Resolution(width: 33, height: 77);
// 结构体和枚举是值类型
// 类似Swift中的整数,浮点数,布尔值,字符串,数组和字典,都是值类型的,
// 并且这些类型在Swift中的实现都是基于结构体的。故所有结构体和枚举值类型都是值类型。
let someResolution3 = Resolution(width: 33, height: 77);
var myResolution = someResolution3;
var currentDirection = CompassPoint.west;
let rememberedDirection = currentDirection;
currentDirection.turnNorth();
print("当前的方向,被改变后 \(currentDirection)");
//!< 当前的方向,被改变后 north
print("保存的方向 \(rememberedDirection)");
//!< 保存的方向 west
// 类是引用类型的
let tenEighty = VideoMode();
tenEighty.resolution = someResolution;
tenEighty.interlaced = true;
tenEighty.name = "视频模式";
tenEighty.frameRate = 25.0;
//赋值给新的实例对象
let alsoTenEighty = tenEighty;
alsoTenEighty.frameRate = 30.0;
print(tenEighty.frameRate,alsoTenEighty.frameRate);
//!< tenEighty.frameRate:30.0 alsoTenEighty.frameRate:30
// 身份运算符
// 指针
// Swift中引用某个引用类型的实例作为常量或变量时,类似于C中的指针,
// 但它不是指向内存中地址的直接指针(不是直接寻址),
// 并且不需要编写星号*来指示你正在创建一个引用对象。
// 相反,这些引用的定义与Swift中的任何其他常量或变量一样。
网友评论