swift 字符串(String) 协议

225 阅读2分钟

ios swift 基础 合集- 荔枝 点击查看更多

  • 声明String

String struct 结构体

@frozen public struct String {

    /// Creates an empty string.

    ///

    /// Using this initializer is equivalent to initializing a string with an

    /// empty string literal.

    ///

    ///     let empty = ""

    ///     let alsoEmpty = String()

    @inlinable public init()

image.png

  • extension String : ExpressibleByStringLiteral 字面量表达

extension String : ExpressibleByStringLiteral

ExpressibleByStringLiteral 字面量表达:就是写个字符串就可以转换成String

let greeting1 = String.init("Hello, playground")

var greeting2 = "Hello, playground" //字面量表达

参考:juejin.cn/post/703416…

  • extension String : CustomDebugStringConvertible 调试描述

extension String : CustomDebugStringConvertible {

    public var debugDescription: String { get }

}
  • extension String : CustomStringConvertible 描述

extension String : CustomStringConvertible {

    @inlinable public var description: String { get }

}
  • extension String : BidirectionalCollection 双向集合

extension String : BidirectionalCollection {

    public typealias SubSequence = Substring

    public typealias Element = Character

    @inlinable public var startIndex: String.Index { get }

    @inlinable public var endIndex: String.Index { get }

    public var count: Int { get }

    public func index(after i: String.Index) -> String.Index

    public func index(before i: String.Index) -> String.Index

    public func index(_ i: String.Index, offsetBy distance: Int) -> String.Index

    public func index(_ i: String.Index, offsetBy distance: Int, limitedBy limit: String.Index) -> String.Index?

    public func distance(from start: String.Index, to end: String.Index) -> Int

    public subscript(i: String.Index) -> Character { get }

    public typealias Indices = DefaultIndices<String>

}

image.png

  • extension String : Hashable

extension String : Hashable {

    public func hash(into hasher: inout Hasher)


    public var hashValue: Int { get }

}

Hashable 继承 Equatable。Swift特性你可以使用自定义的类型作为合集的值或者字典的key,只需要让他遵循Hashable协议

public protocol Hashable : Equatable
  • extension String : TextOutputStreamable 输出流协议 和 print 有关


extension String : TextOutputStreamable {

    @inlinable public func write<Target>(to target: inout Target) where Target : TextOutputStream

}

参考 juejin.cn/post/684490…

  • extension String : TextOutputStream 输出流 和 print 有关

extension String : TextOutputStream {

    public mutating func write(_ other: String)

}

参考: www.jianshu.com/p/dc801ddbc…

  • extension String : CustomReflectable Mirror反射

所谓反射就是可以动态获取类型、成员信息,在运⾏时可以调⽤⽅法、属性等⾏为的特性

extension String : CustomReflectable {

image.png

  • extension String : CodingKeyRepresentable 自定义字典的key

extension String : CodingKeyRepresentable {

    public var codingKey: CodingKey { get }

    public init?<T>(codingKey: T) where T : CodingKey

}

参考:www.jianshu.com/p/fdf03febc…

  • extension String : Codable 将模型对象转换为 JSON 或者是其它的数据格式

extension String : Codable {


    public init(from decoder: Decoder) throws

    public func encode(to encoder: Encoder) throws

}
  • extension String : Equatable 判断是否相等


extension String : Equatable {

    @inlinable public static func == (lhs: String, rhs: String) -> Bool

}
  • extension String : Comparable 对比大小


extension String : Comparable {

    @inlinable public static func < (lhs: String, rhs: String) -> Bool

}
  • extension String : StringProtocol 字符串protocol

extension String : StringProtocol {


    public typealias StringInterpolation = DefaultStringInterpolation

}
  • extension String : RangeReplaceableCollection 提供了替换集合中一个连续区间的元素的能力

extension String : RangeReplaceableCollection {

   //省略 ......

}

参考:juejin.cn/post/696679…

  • String ,Array 继承 Collection 区分

StringArray协议.png