在计算机科学中,字面量(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对象
字面量很强大,但也不能乱用,否则,其他人在阅读你的代码的时候,会有困难。
网友评论