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

来源:互联网 发布:网络配线架品牌 编辑:程序博客网 时间:2024/06/05 02:30

目录:

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"

















0 0