字面量转换

2017-07-19  本文已影响14人  TomatosX

在计算机科学中,字面量(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对象

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

上一篇下一篇

猜你喜欢

热点阅读