美文网首页
Swift-协议

Swift-协议

作者: MissSunRise | 来源:发表于2021-07-01 20:34 被阅读0次

协议

protocol Drawable.png class Person Drawable {.png
设置协议后有自动补齐,而且是必实现,不然会报错的。

Static、class

为了保证类与结构体都能够使用,协议中必须用static定义类型方法、类型属性、类型下标
protocol Drawable.png
不为 static 会报错

mutating

协议中的实例方法需要使用mutating来修饰
protocol Drawable.png

init

  • 协议中还可以定义初始化器 init
  • 非final类实现时必须加上required
protocol Drawable.png protocol Drawable {.png
  • 从协议实现的初始化器,刚好是重写了父类的指定初始化器
  • 那么这个初始化必须同时加required、override
protocol Livable.png

init、init?、init!

协议中定义的init?、init!,可以用init、init?、init!实现

协议中定义的init, 可以用init、init!去实现

protocol Livable{.png

协议的继承

一个协议可以继承其他协议(个人理解有点像分类)

protocol Runnable {.png

协议组合

func fne(obj Person).png

同时遵守多种条件

= typealias RealPerson = Livable & Runnable & Person.png

将协议写成变量的方式

CaseIterable

enum Season.png

让枚举遵守CaseIterable协议,可以实现遍历枚举值

CustomStringConvertible

class Porson CustonStringConvertible, CustombebugStringConvertsble {.png

实现CustomStringConvertible协议后,print打印的函数为 description 的实现
实现CustomDebugStringConvertible协议后,debugPrint打印的函数为 debugDescription 的实现

X.self 、 X.Type 、 AnyClass

X.self是一个元类型(metadata)的指针,metadata存放着类型相关信息

X.self 属于X.Type类型

var perType Person. Type = Person.self.png public typealias AnyClass = AnyObject. Type.png

定义一种type

var anyType2 AnyClass = Person.self.png

AnyClass等于AnyObject.Type 包含了所有类型

per = Person().png

type(of: per) 等同于Person.self

看似是一个函数,但是不会使用到栈,说明进行了优化。

元类型的应用

class Animal { required init() {} }.png

AnyObject.Self 等价于 [AnyObject class]

使用场景,让不同类型做相同的事情

或者为不知道的类型留下操作空间

class Porson.png

Swift同样可以使用Runtime的一些方法

如果一个Swift类,没有继承其他类,这个类就被叫做 base类

但是其实在底层实现下,base类也是有父类的:SwiftObject

很容易理解,编译器为了满足公共方法,肯定是有一个公共类的

相关文章

  • Swift-协议

    最近项目使用的是OC,后头看之前用Swift开发的一个项目时,发现很多细节都忘记了??。为了回忆和以后方便查看,现...

  • Swift-协议

    协议 设置协议后有自动补齐,而且是必实现,不然会报错的。 Static、class 为了保证类与结构体都能够使用,...

  • Swift-协议

    一、概览 二、协议的定义和遵守 二、协议的继承和限定类遵守 三、方法参数要求多个协议 四、OC协议兼容 OC中协议...

  • swift-协议扩展

    协议的命名遵循 Swift 的标准库, 即协议名以 "Type", "-able", "-ible" 结尾 例如 ...

  • Swift-面向协议编程

    Swift协议里的方法可以实现 OC只能声明方法所以Swift才能实现面向协议编程 需要这个功能的,只需要遵守这...

  • Swift-面向协议编程

    前言 OC无法做到面向协议开发,而Swift可以,因为Swift可以做到协议方法的具体实现,而OC不行 面向对象开...

  • swift-类属性

    了解属性之前,需要先了解前面的swift-类结构内容 - swift-类结构源码探寻[https://www.ji...

  • Swift4.0 --- 第一节:变量和常量

    // // ViewControllerOne.swift // Swift-(1) // // Created ...

  • Swift4.0 --- 可选项

    // // ViewControllerTwo.swift // Swift-(1) // // Created ...

  • Swift4.0 --- 可选项的判断

    // // ViewControllerFour.swift // Swift-(1) // // Created...

网友评论

      本文标题:Swift-协议

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