美文网首页
字面量转换

字面量转换

作者: TomatosX | 来源:发表于2017-07-19 14:56 被阅读14次

    在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(notation)。

    Swift 为我们提供了一组非常有意思的接口,用来将字面量转换为特定的类型。对于那些实现了字面量转换接口的类型,在提供字面量赋值的时候,就可以简单地按照接口方法中定义的规则“无缝对应”地通过赋值的方式将值转换为对应类型。

    let aNumber = 3
    let aString = "Hello"
    let aBool = true
    

    3, “hello”,true 就称为字面量

    光说概念可能有点抽象,我们来写个Demo

    定义一个Person类,并且实现ExpressibleByStringLiteral这个接口

    class Person: ExpressibleByStringLiteral {
        
        var name: String?
        
        init(name value: String) {
            self.name = value
        }
        
        required convenience init(stringLiteral value: String) {
            self.init(name: value)
        }
        
        required convenience init(extendedGraphemeClusterLiteral value: String) {
            self.init(name: value)
        }
        
        required convenience init(unicodeScalarLiteral value: String) {
            self.init(name: value)
        }
    }
    

    接下来我们如何创建一个Person对象呢?
    创建一个类的对象通常的做法是调用这个类的init方法

    let person1 = Person(name: "Tom")
    

    但是我们实现了ExpressibleByStringLiteral接口,我们就可以这样来创建一个Person

    let person: Person = "Tom"
    

    这就是我们前面所提到的将字面量转换为特定的类型

    类似的实现还有String

    let str = "abc" // 创建一个String对象
    

    字面量很强大,但也不能乱用,否则,其他人在阅读你的代码的时候,会有困难。

    相关文章

      网友评论

          本文标题:字面量转换

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