字面量转换

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,328评论 18 399
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 9,461评论 1 10
  • 2017/10/1 种种子(第22天) 赵甜(作者) 立志:成为爱,总爱点亮自己,照亮他人。 发心:我今天不仅是为...
    一粒麦田阅读 1,445评论 1 2
  • 一直以为自己每天克服着各种各样的困难,好不伟大 一直觉得异乡 多么棒 旅游 好吃的 文化 各种新鲜好玩的事物 直到...
    角落蜷缩阅读 2,394评论 0 0
  • 若非一番寒彻骨,哪的梅花扑鼻香? 无论做何事,道和理都是一样的:意志不够坚强和深远,在回首时,谈何笑谈风声、举重若...
    寒风81阅读 3,843评论 0 0

友情链接更多精彩内容