目录:
1.属性
2.方法
3.下标脚本
//1.属性
//存储属性和计算属性
struct Point
{
var x = 0.0, y = 0.0;
}
struct Size
{
var width = 0.0, height = 0.0;
}
struct testStruct
{
var origin = Point();
var size = Size();
var center: Point//计算属性:通过一个get和可选的set来设置和获取值
{
get
{
let centerX = origin.x + (size.width / 2);
let centerY = origin.y + (size.height / 2);
return Point(x: centerX, y: centerY);
}
// set(newCenter) //显示set值
// {
// origin.x = newCenter.x - (size.width / 2);
// origin.y = newCenter.y - (size.height / 2);
// }
set//快捷set值,有默认的新值newValue
{
origin.x = newValue.x - (size.width / 2);
origin.y = newValue.y - (size.height / 2);
}
}
}
var testStruct1 = testStruct(origin: Point(x:0.0,y:0.0), size: Size(width:12.0,height:15.0));
print(testStruct1.center);//输出:6.0,7.5
testStruct1.center = Point(x:5.0,y:8.0);
print(testStruct1.origin);//输出:Point(x: -1.0, y: 0.5)
//只读属性
struct testStructReadOnly
{
var origin = Point();//存储属性
var size = Size();
var center: Point//只读属性:可以不要getter
{
let centerX = origin.x + (size.width / 2);
let centerY = origin.y + (size.height / 2);
return Point(x: centerX, y: centerY);
}
}
//属性观察器:willSet,didSet
class StepCounterTest
{
var totalSteps: Int = 0
{
willSet(newTotalSteps)// willSet在新的值被设置之前调用
{
print("设置总步数:\(newTotalSteps)");
}
didSet//didSet在新的值被设置之后立即调用
{
if totalSteps > oldValue
{
print("增加了 :\(totalSteps - oldValue) 步数");
}
}
}
}
let stepCounter = StepCounterTest();
stepCounter.totalSteps = 200
// 设置总步数:200
// 增加了:200 步数
stepCounter.totalSteps = 360
// 设置总步数:360
// 增加了:160 步数
//2.方法
//self类似this指针
//修改值类型的属性,在方法前加上mutating(变化,突变)关键字
struct PointTest
{
var x = 0.0, y = 0.0
mutating func moveByX(deltaX: Double, y deltaY: Double)
{
x += deltaX;//修改值类型属性:X
y += deltaY;
}
}
var somePoint = PointTest(x: 1.0, y: 1.0)
somePoint.moveByX(2.0, y: 3.0)
print("The point is now at (\(somePoint.x), \(somePoint.y))")
// 打印输出: "The point is now at (3.0, 4.0)"
//3.下标脚本:下标脚本 可以定义在类(Class)、结构体(structure)和枚举(enumeration)这些目标中。类似数组,字典的下标访问
struct TestSubscript
{
let multiplier: Int;
subscript(index: Int) -> Int
{
get
{
return multiplier * index;
// 返回与入参匹配的Int类型的值
}
set
{ // 执行赋值操作
}
}
}
let threeTimesTable = TestSubscript(multiplier: 3);
print("3的6倍是\(threeTimesTable[6])");
// 输出 "3的6倍是18"