美文网首页swift
iOS开发 - 「Swift 学习」Swift的实例方法与类型方

iOS开发 - 「Swift 学习」Swift的实例方法与类型方

作者: 俺不是大佬儿 | 来源:发表于2022-02-23 12:08 被阅读0次
在Objective-C中,类是唯一能定义方法的类型,在Swift中可以灵活的在创建的类/结构体/枚举类型里定义方法

一、实例方法

实例方法是属于某个特定的类、结构体、枚举类型实例的方法

实例方法特性

1.可以访问和修改实例属性;
2.提供与实例目的相关的功能

▪实例方法要写在它所属的类型的前后大括号({})之间。
▪实例方法能够隐式访问它所属类型的所有的其他实例方法和属性。
▪ 实例方法只能被它所属的类的某个特定实例调用。
▪实例方法不能脱离于现存的实例而被调用。

实例方法中的self属性

类型的每一个实例都有一个隐含的属性selfself完全等同于该实例本身(与Objective-C中的类中的self相同,等同于实例本身)
在一个实例的实例方法中可以通过使用这个隐含的self属性来引用当前实例。


class Example {
    
    let a: Int
    let b: Int
    let sum: Int
    
    init(a: Int, b: Int) {
        self.a = a
        self.b = b
        sum = a + b
        print("Self 内: \(sum)")
    }
    
    func tot(c: Int) -> Int {
        return sum - c
    }
    
    func result() {
        print("结果为: \(tot(c: 20))")
        print("结果为: \(tot(c: 50))")
    }
}

调用

func instanceMethodsStudy (){
    
    let pri = Example.init(a: 100, b: 200)
    let sum = Example.init(a: 50, b: 60)
    pri.result()
    sum.result()
}

调用结果

Self 内: 300
Self 内: 110
结果为: 280
结果为: 250
结果为: 90
结果为: 60

在实例方法中修改值类型

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

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

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

struct rectangularArea {
    var length = 1
    var breadth = 1
    
    func area() -> Int {
        return length * breadth
    }
    //通过mutating定义实例方法改变属性值
    mutating func scaleBy(res: Int) {
        //重写 length breadth值
        length *= res
        breadth *= res
        
        print("当前length:\(length)")
        print("当前breadth:\(breadth)")
    }
}

调用

func mutatingStudy (){
    var val = rectangularArea(length: 4, breadth: 6)
    val.scaleBy(res: 2)
    val.scaleBy(res: 20)
    val.scaleBy(res: 200)
}

调用结果

当前length:8
当前breadth:12

当前length:160
当前breadth:240

当前length:32000
当前breadth:48000

在可变方法(mutating)中给self赋值

struct rectangularArea {
    var length = 1
    var breadth = 1
    
    func area() -> Int {
        return length * breadth
    }
    
    mutating func scaleBy(res: Int) {
        //重写 length breadth值
        self.length *= res
        self.breadth *= res
        
        print("当前length:\(self.length)")
        print("当前breadth:\(self.breadth)")
    }
}

调用

func mutatingStudy (){
    var val = rectangularArea(length: 4, breadth: 6)
    val.scaleBy(res: 2)
}

调用结果

当前length:8
当前breadth:12

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

二、类型方法

通过类型本身调用的方法就叫类型方法

声明结构体/枚举的类型方法,在func关键字前加static关键字

类会使用关键字class来允许子类重写父类的实现方法

类型方法调用

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

class MathFormula {
//声明类型方法
    class func abs(number:Int) -> Int {
        if number < 0
        {
            return (-number)
            
        }else {
            return number
        }
    }
}

struct absTurn
{
//用static关键字声明结构体的类型方法
    static func abs(number: Int) -> Int
    {
        if number < 0
        {
            return (-number)
        } else{
            return number
        }
    }
}

调用

func classMethodsStudy (){
    let no = MathFormula.abs(number: -35)
    let num = absTurn.abs(number: -5)
    
    print("获取绝对值结果no:\(no)")
    print("获取反绝对值结果num:\(num)")
}

调用结果

获取绝对值结果no:86
获取反绝对值结果num:3

\color{gray}{欢迎大佬儿来指正纠错,共同学习😏!!}

相关文章

网友评论

    本文标题:iOS开发 - 「Swift 学习」Swift的实例方法与类型方

    本文链接:https://www.haomeiwen.com/subject/dqmglrtx.html