Swift:实例方法和类型方法

本人录制技术视频地址:https://edu.csdn.net/lecturer/1899 欢迎观看。

大家对“实例方法和类型方法”的概念应该不陌生了,在objective-c中很常见。例如:

1. 实例方法(减号开头)

- (instancetype)init;
调用的时候,必须先进行实例化一个对象(alloc), 然后调用init方法。

2. 类型方法(加号开头)

+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations
调用的时候,直接使用UIView的类型就可以了。

而在Swift中写法有所改变,它使用class和static关键字来标示。而且不仅仅是作用在类中,枚举和结构体(enum, struct)中也有相应的方法。

在class类型上下文中,我们使用class;其他的使用static

一、作用于结构注:代码中,有关存储属性及计算属性的知识,我会在后续章节进行详细的介绍。

struct Point {
    let x: Double
    let y: Double
    
    // 存储属性
    static let zero = Point(x: 0, y: 0)
    
    // 计算属性
    static var ones: [Point] {
        return [
            Point(x: 1, y: 1),
            Point(x: -1, y: 1),
            Point(x: 1, y: -1),
            Point(x: -1, y: -1)
        ]
    }

    // 类型方法
    static func add(p1: Point, p2: Point) -> Point {
        return Point(x: p1.x + p2.x, y: p1.y + p2.y)
    }
}

let p = Point(x: 3, y: 4)

Point.zero
Point.ones
Point.add(Point(x: 1, y: 2), p2: Point(x: 2, y: 1))

可以看到,在结构中,我们可以在其属性或者方法前面加static进行修饰,调用的时候,直接可以通过类型名称"Point" 出对应的属性或者方法。


二、作用

class Square {
    // 类型属性,用class关键字
    class var PI: Double{
        return 3.14
    }
}

可以看到,在类中,我们可以在其属性或者方法前面加class进行修饰,调用的时候,直接Square.PI 就可以了。 代码中是对“计算属性”进行了class修饰。而这里的计算属性只是简写,我们也可以写成下面的方式:

class Square {
    class var PI: Double{
        get { return 3.14 }
    }
}


但需要注意的是,存储属性不能使用class进行修饰。

class Student {
    class var phone: String?
}

编译后会报错:“class variables not yet supported

而用static就可以了。

class Student {
    static var phone: String?
}


三、作用协议

protocol MyProtocol {
    static func foo() -> String
}

struct MyStruct: MyProtocol {
    static func foo() -> String {
        return "MyStruct"
    }
}

class MyClass {
    class func foo() -> String {
        return "MyClass"
    }
}

可以看出,在protocol中定义的属性或者方法,是在其前面加上static修饰符的,但问题来了, 实现协议有可能是结构体或者枚举,也有可能是类。那实现体中应该使用什么修饰符?通过观察上面的写法可以看出:

在protocol中定义的方法或者计算属性,类型修饰符是static;在实现的结构或者枚举中,修饰符使用static,在实现的class中,修饰符使用class。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋恨雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值