Swift中常见的协议

作者: 91阿生 | 来源:发表于2020-08-28 17:26 被阅读0次
前言

Swift标准库为我们提供了55中协议,基本都是以TypeableConvertible结尾的。

Type结尾的协议,表示可以被当作某种类型;

able结尾的协议,表示具备某种能力或者特性;

Convertible结尾的协议,表示能够进行改变或者变化。

Swift标准库中的55个协议

AbsoluteValuable
AnyCollectionType
AnyObject
ArrayLiteralConvertible
BidirectionalIndexType
BitwiseOperationsType
BooleanLiteralConvertible
BooleanType
CVarArgType
CollectionType
Comparable
CustomDebugStringConvertible
CustomLeafReflectable
CustomPlaygroundQuickLookable
CustomReflectable
CustomStringConvertible
DictionaryLiteralConvertible
Equatable
ErrorType
ExtendedGraphemeClusterLiteralConvertible
FloatLiteralConvertible
FloatingPointType
ForwardIndexType
Generator Type
Hashable
Indexable
IntegerArithmeticType
IntegerLiteralConvertible
IntegerType
IntervalType
LazyCollectionType
LazySequenceType
MirrorPathType
MutableCollectionType
MutableIndexable
MutableSliceable
NilLiteralConvertible
OptionType
OutputStreamType
RandomAccessIndexType
RangeReplaceableCollectionType
RawRepresentable
ReverseIndexType
SequenceType => Sequence
SetAlgebraType
SignedIntegerType
SignedNumberType
Streamable
Strideable
StringInterpolationConvertible
StringLiteralConvertible
UnicodeCodecType
UnicodeScalarLiteralConvertible
UnsignedIntegerType

常见的协议

Equatable
Equatable是比较相关的协议,遵循该协议表示实例能够用于做相等的比较,但是需要重载==运算符。

struct Person: Equatable {
    var name: String
    var age: Int
    static func == (lhs: Person, rhs: Person) -> Bool {
        return lhs.name == rhs.name && lhs.age == rhs.age
    }
}
Comparable

Comparable是基于Equatable的一种延续,同样用于比较相关的协议,遵循该协议的实例能够进行比较,但是需要重载<运算符。

struct Person: Comparable {
    var name: String
    var age: Int
    static func < (lhs: Person, rhs: Person) -> Bool {
        return lhs.age < rhs.age
    }
}
CustomStringConvertible

CustomStringConvertible提供了一种用文本表示一个对象或者结构的描述的方式,可以在任何遵循该协议的类型中自定义结构的文本,但是一定需要覆盖description的属性

struct Person: CustomStringConvertible {
    var name: String
    var age: Int
    var description: String {
        return "\(name)" + "的年龄是" + "\(age)"
    }
}
ExpressibleByArrayLiteral

ExpressibleByArrayLiteral提供了使用数组文本初始化的类型的能力,具体就是使用逗号分割的值、实例、字面值列表。

struct Person: ExpressibleByArrayLiteral {
    typealias ArrayLiteralElement = Any
    
    var name: String
    var age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
    
    init(arrayLiteral elements: Person.ArrayLiteralElement...) {
        var name: String = ""
        if let nm = elements.first as? String {
            name = nm
        }
        var year: Int = 0
        if let aage = elements[1] as? Int {
            year = aage
        }
        self.init(name: name, age: year)
    }
}

相关文章

  • 面向协议编程

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

  • Swift超基础语法(协议与代理篇)

    代理设计模式是开发中比较常见的设计模式之一,那么在Swift中应该如何实现代理与协议呢? 协议(protocol)...

  • Swift及SwiftUI学习笔记

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

  • Swift 命名空间形式扩展的理解和问题探讨

    先从 Swift 协议扩展的语法说起 注:协议扩展 Protocol extension: Swift 1.x 中...

  • Swift学习笔记-协议

    Swift中的协议类似于Java中的接口,不过在Swift中,结构体,枚举,类都能使用协议 基本用法 符合多个协议...

  • Swift - 协议(protocol)

    Swift - 协议(protocol) 1、Swift中协议类似于别的语言里的接口,协议里只做方法的声明,包括方...

  • Swift中常见的协议

    前言 Swift标准库为我们提供了55中协议,基本都是以Type、able、Convertible结尾的。 以Ty...

  • 协议(三)

    标准库中的协议 Swift标准库广泛使用的协议可能会让你感到惊讶。理解协议在Swift中扮演的角色可以帮助您编写干...

  • Swift语言总结

    Swift学习总结 协议 协议是方法的集合,它可以把看似不想关的对象的公共行为放到一个协议中。协议在Swift开发...

  • 【Tips】Swift Protocol

    前言 本文是笔者学习Swift协议的笔记。 开始 OC中判断是否遵守某个协议有对应的方法,Swift中也有,但是开...

网友评论

    本文标题:Swift中常见的协议

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