Swift基础(六):属性、方法、下标脚本

本文详细介绍了Swift语言中属性的概念,包括存储属性、计算属性及只读属性,并演示了如何使用属性观察器。此外,还介绍了如何定义方法以及如何通过下标脚本来访问和设置值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录:

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("36倍是\(threeTimesTable[6])");

// 输出 "36倍是18"

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值