美文网首页
swift--字符串之自定义字面量

swift--字符串之自定义字面量

作者: i诺离 | 来源:发表于2020-12-07 16:17 被阅读0次

什么是字面量

字面量意思是用"blah"近乎等价交换String("blah"),但这两者是不同的
""是字符串字面量表示

协议

字符串以字面量初始化遵循的协议
ExpressibleByStringLiteral

扩展字位族或者Unicode标量的以字面量形式进行初始化的协议
ExpressibleByExtendedGraphemeClusterLiteral
ExpressibleByUnicodeScalarLiteral

代码

struct SafeHTML {
    private(set) var value: String
    
    init(unsafe html: String) {
        self.value = html
    }
}

extension SafeHTML: ExpressibleByStringLiteral {
// 字面量初始化方法
    init(stringLiteral value: StringLiteralType) {
        self.value = value
    }
}

作用

使用字面量初始化时,默认处理字符串格式,安全便捷

  • 代码用例:
extension String {
    var htmlEscaped: String {
        return replacingOccurrences(of: "<", with: "&lt;").replacingOccurrences(of: ">", with: "&gt;")
    }
}

extension SafeHTML: ExpressibleByStringLiteral {
// 字面量初始化方法
    init(stringLiteral value: StringLiteralType) {
        self.value = value. htmlEscaped
    }
}

let html: SafeHTML = "<p>html string</p>"

字面量中的插值

let pin = "pin"
let html: SafeHTML = "<p>html string\(pin) ddd \(raw: pin)</p>"

协议

继承自ExpressibleByStringLiteral
ExpressibleByStringInterpolation

初始化、appendLiteral、appendInterpolation
StringInterpolationProtocol

代码

extension SafeHTML: ExpressibleByStringInterpolation {
    init(stringInterpolation: SafeHTML) {
        print("stringInterpolation")
        self.value = stringInterpolation.value
    }

}

extension SafeHTML: StringInterpolationProtocol {
    init(literalCapacity: Int, interpolationCount: Int) {
        print("literalCapacity")
        self.value  = "起始拼接"
    }
    
    mutating func appendLiteral(_ literal: StringLiteralType) {
        //插值前字面量
        print("appendLiteral-\(literal)")
        value += literal
    }
    
    mutating func appendInterpolation<T>(_ x: T) {
        // 拼接参数
        print("appendInterpolation")
        self.value += String(describing: x).htmlEscaped
        print(self.value)
    }

    // 拓展插值的其他处理
    mutating func appendInterpolation<T>(raw x: T) {
        print("appendInterpolation")
        self.value += String(describing: x)
        print(self.value)
    }
}

相关文章

  • swift--字符串之自定义字面量

    什么是字面量 字面量意思是用"blah"近乎等价交换String("blah"),但这两者是不同的""是字符串字面...

  • ES6系列 (三)模板字面量

    特性 模板字面量实现字符串插值 模板字面量实现多行字符串 模板字面量实现可重用的模板 理解标记模板字面量如何自定义...

  • Swift 5.x String初始化、定义

    1. 字面量初始化字符串 1.1 单行字面量字符串 1.2 字面量初始化多行字符串 输出结果: 当在多行字符串字面...

  • TypeScript基础入门之高级类型的字符串字面量类型

    转发 TypeScript基础入门之高级类型的字符串字面量类型 高级类型 字符串字面量类型 字符串字面量类型允许你...

  • 【Effective Objective-C 2.0 读书笔记】

    第三条:多用字面量语法,少用与之等价的方法 字符串字面量 语法如下:NSString *someString = ...

  • C指针(7):字符串

    字符串 1.字符串声明 字面量定义字面量时通常将其分配在字面量池中, 通常只有一个副本. 关闭字面量池, 可以生成...

  • Swift-字符串和字符(一)

    字符串字面量 字符串字面量可以用于为常量和变量提供初始值: 注意someString常量通过字符串字面量进行初始化...

  • 字符串和字符

    字符串字面量 字符串字面量是由双引号 ( "" ) 包裹着的具 有固定顺序的文本字符 。 字符串字面量可以用于为常...

  • Swift4 字符串截取

    Swift 字符串字面量(String literal)介绍 字符串字面量(string literal)是一段双...

  • Swift3.1_字符串

    字符串字面量 您可以在您的代码中包含一段预定义的字符串值作为字符串字面量。字符串字面量是由双引号""包裹着的具有固...

网友评论

      本文标题:swift--字符串之自定义字面量

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