美文网首页
swift协议基础

swift协议基础

作者: 天蚕 | 来源:发表于2017-02-21 10:48 被阅读96次

swift协议定义方法(不能有默认参数)和属性(不能是let常量且必须表明读取属性)列表。一个类或者结构体遵守协议,就必须申明协议中规定的属性(这里的属性只需要与协议中规定的属性同名同类型即可,不需要有相同的读取属性),实现协议中规定的方法。
1、swift中的继承是单一的,也就是说一个类只能继承一个类,所以swift语法要求如果一个类要继承,又要遵守协议,那么书写方式应该是这样的class 类名:要继承的父类,...要遵守的协议列表
2、协议中也可以定义构造函数,如果一个类遵守的协议和继承的父类都需要实现同一个方法,那么就需要同时使用requiredoverride
3、协议中的如果需要对属性的类型别名typealiasassociatedtype是同一个意思,类型别名,只不过苹果为了区别要求类型别名关键字typealiasassociatedtype替换,属于协议专用的,表明遵守协议的类型,必须定义一个同名的类型别名,而在协议实现时定义这个类型别名还是使用typealias关键字,associatedtype只会出现在协议中

///class和struct都能实现的协议
///mutating用于修饰结构题的方法,表明方法可以修改结构体自身,对于class是没有意义的。对于可能修改自身的方法就需要考虑用mutating修饰
protocol Animal
{
    //类型别名
    associatedtype AnimalType;
    //可读可写的属性
    var name:String {get set}
    //只读的属性
    var age:Int {get}
    
    func eat();
    mutating func changeName();
}

///只有class实现的协议
protocol Plant
{
     //类型别名
     associatedtype PlantType;
    //可读可写的属性
    var name:String {get set}
    //只读的属性
    var age:Int {get}
    
    func eat();
}

4、协议的扩展extension可以为协议提供默认实现
在协议的扩展中,我们可以直接为协议方法提供默认实现,为协议中的属性(计算型属性)添加默认实现,同样可以给协议添加方法和计算属性,并提供默认实现;在扩展中添加的方法和属性,必须提供默认实现。如果遵守协议的类或者结构体没有实现协议规定的方法,那么直接使用扩展中的默认方法实现

相关文章

  • swift协议基础

    swift协议定义方法(不能有默认参数)和属性(不能是let常量且必须表明读取属性)列表。一个类或者结构体遵守协议...

  • Swift 5.1 (20) - 协议

    Swift 5.1 (20) - 协议Swift 5.1 (20) - 协议

  • Swift:基础(三十)协议

    Swift 协议 协议规定了用来实现某一特定功能所必需的方法和属性。 任意能够满足协议要求的类型被称为遵循(con...

  • Swift基础语法-协议

    1. 协议的格式 协议的定义方式与类,结构体,枚举的定义都非常相似 协议默认可以被类/结构体/枚举类型遵守 格式:...

  • Swift面向协议基础

    Demo拉取地址:https://gitee.com/xgkp/swiftBasicProtocol.git 明天...

  • 面向协议编程

    协议(Protocol)是 Swift 的基础功能。在 Swift 的标准库中起着主导作用,并且是一种常见的抽象方...

  • swift 可选协议

    前言 swift 协议 swift可选协议 协议前添加 @objc ,把你想要改成的可选协议前添加 @objc ...

  • Swift及SwiftUI学习笔记

    持续更新中...... swift官方文档 swift官方文档(英文) 协议 swift主要基于协议编程的,所以协...

  • # Swift 集合类型之迭代器

    我们知道在 Swift 中 Sequence 是 集合类型结构 中的基础。而在 Sequence 协议的定义当中我...

  • Swift底层进阶--015:Codable源码解析

    Codable协议在Swift4.0开始被引入,目的是取代NSCoding协议。Codable协议对Swift基本...

网友评论

      本文标题:swift协议基础

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