美文网首页
字面量转换

字面量转换

作者: 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对象

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

相关文章

  • 字面量转换

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

  • Swift_ios_二进制,十进制,十六进制之间的转换

    这里所说的转换,并不是Swift中字面量之间的转换。如果是字面量之间的转换,ios系统中已经自动帮我们转换了。 例...

  • swift中进制问题

    这里所说的转换,并不是Swift中字面量之间的转换。如果是字面量之间的转换,ios系统中已经自动帮我们转换了。 例...

  • JavaScript - New

    Menu 语法和类型声明变量提升函数提升数据结构和类型数据类型的转换字面量数组字面量(Array literals...

  • 字面量

    字面量: 1、数字字面量: 1.1、整数: 10进制:普通数字就是十进制 8进制:以0开头(...

  • 字面量

  • 字面量

    字面量 常见字面量的默认类型 可以通过typealias修改字面量的默认类型 swift自带类型之所以能够通过字面...

  • 字面量

    字面量(Literal) 上面代码中的10、false、"Jack"就是字面量 常见字面量的默认类型 public...

  • 字面量

    在读《编写高质量iOS与OS X代码的52个有效方法》这本书时,才发现了一个自己一直遗漏的问题,NSArr...

  • swift-literal 原义字面量转换

    个人理解是什么?类似java的反射 字符串到类的映射,如给一个字符串能直接初始化一个类 太抽象?不好懂?见效果 ...

网友评论

      本文标题:字面量转换

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