swift_021(Swift 的方法)

本文详细介绍了Swift语言中的实例方法和类型方法。包括实例方法的特点、如何定义及使用,并通过计数器类进行了实例演示。此外还介绍了类型方法的概念、定义方式及其调用方法,并通过数学运算类进一步解释了类型方法的应用。

//***********swift学习之21--方法--***************************


/*

 实例方法

 Swift语言中,实例方法是属于某个特定类、结构体或者枚举类型实例的方法。

 a.实例方法要写在它所属的类型的前后大括号({})之间。

 b.实例方法能够隐式访问它所属类型的所有的其他实例方法和属性。

 c.实例方法只能被它所属的类的某个特定实例调用。

 d.实例方法不能脱离于现存的实例而被调用。

 */


class Counter {

    var count = 0

    func increment() {

        count += 1

    }

    func incrementBy(amount: Int) {

        count += amount

    }

    func reset() {

        count = 0

    }

}

// 初始计数值是0

let counter = Counter()


// 计数值现在是1

counter.increment()


// 计数值现在是6

counter.incrementBy(amount: 5)

print(counter.count)


// 计数值现在是0

counter.reset()

print(counter.count)




class division {

    var count: Int = 0

    func incrementBy(no1: Int, no2: Int) {

        count = no1 / no2

        print(count)

    }

}


let div = division()

div.incrementBy(no1: 1800, no2: 3)



/*

 类型方法

 实例方法是被类型的某个实例调用的方法,你也可以定义类型本身调用的方法,这种方法就叫做类型方法。

 声明结构体和枚举的类型方法,在方法的func关键字之前加上关键字static。类可能会用关键字class来允许子类重写父类的实现方法。

 类型方法和实例方法一样用点号(.)语法调用。

 */


class Math

{

    class func abs(number: Int) -> Int

    {

        if number < 0

        {

            return (-number)

        }

        else

        {

            return number

        }

    }

}


struct absno

{

    static func abs(number: Int) -> Int

    {

        if number < 0

        {

            return (-number)

        }

        else

        {

            return number

        }

    }

}


let no = Math.abs(number: -35)

let num = absno.abs(number: -5)


print(no)

print(num)


/*

 在实例方法中修改值类型

 Swift 语言中结构体和枚举是值类型。一般情况下,值类型的属性不能在它的实例方法中被修改。

 但是,如果你确实需要在某个具体的方法中修改结构体或者枚举的属性,你可以选择变异(mutating)这个方法,然后方法就可以从方法内部改变它的属性;并且它做的任何改变在方法结束时还会保留在原始结构中。

 方法还可以给它隐含的self属性赋值一个全新的实例,这个新实例在方法结束后将替换原来的实例。

 */


struct area {

    var length = 1

    var breadth = 1

    

    func area() -> Int {

        return length * breadth

    }

    

    mutating func scaleBy(res: Int) {

        length *= res

        breadth *= res

        

        print(length)

        print(breadth)

    }

}


var val = area(length: 3, breadth: 5)

val.scaleBy(res: 3)

val.scaleBy(res: 30)

val.scaleBy(res: 300)


/*

 在可变方法中给 self 赋值

 可变方法能够赋给隐含属性 self 一个全新的实例。

 */


struct area1 {

    var length = 1

    var breadth = 1

    

    func area() -> Int {

        return length * breadth

    }

    

    mutating func scaleBy(res: Int) {

        self.length *= res

        self.breadth *= res

        print(length)

        print(breadth)

    }

}

var val1 = area1(length: 3, breadth: 5)

val.scaleBy(res: 13)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值