Swift学习( 十一:构造过程2)

1.可失败构造器
  • 语法为在init关键字后面添加问好init?

  • 可失败构造器的参数名和参数类型,不能与其它非可失败构造器的参数名及参数类型相同。

  • 可失败构造器会创建一个类型为自身的可选类型的对象,通过return nil语句表明可失败构造器在任何情况下应该失败

      struct Animal {
          let species: String
          init?(species: String) {
              if species.isEmpty { return nil }
              self.species = species
          }
      }
      //如果species这个字符串为空,则构造失败。
    
      let someCreature = Animal(species: "Giraffe")
      // someCreature 的类型是 Animal? 而不是 Animal
    
      if let giraffe = someCreature {
          print("\(giraffe.species)")
      }
      // 打印 "Giraffe"
    
2.构造失败的传递

类,结构体,枚举的可失败构造器可以横向代理到类型中的其他可失败构造器。类似的,子类的可失败构造器也能向上代理到父类的可失败构造器。

无论是向上代理还是横向代理,如果你代理到的其他可失败构造器触发构造失败,整个构造过程将立即终止,接下来的任何构造代码不会再被执行。

3.可失败构造器 init!

通常来说我们通过在init关键字后添加问号的方式init?来定义一个可失败构造器,但你也可以通过在init后面添加惊叹号的方式来定义一个可失败构造器init!,该可失败构造器将会构建一个对应类型的隐式解包可选类型的对象。
你可以在init?中代理到init!,反之亦然。你也可以init?重写init!,反之亦然。你还可以用init代理到init!,不过,一旦init!构造失败,则会触发一个断言。

4.必要构造器

在类的构造器前添加required修饰符表明所有该类的子类都必须实现该构造器:

    class SomeClass {
        required init() {
            // 构造器的实现代码
        }
    }

通过闭包或函数设置属性的默认值

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本章将会介绍 存储属性的初始赋值自定义构造过程默认构造器值类型的构造器代理类的继承和构造过程可失败构造器必要构造器...
    寒桥阅读 782评论 0 0
  • 构造过程是为了使用某个类、结构体或枚举类型的实例而进行的准备过程。这个过程包含了为实例中的每个属性设置初始值和为其...
    零度_不结冰阅读 263评论 0 0
  • 123.继承 一个类可以从另外一个类继承方法,属性和其他特征。当一个类继承另外一个类时, 继承类叫子类, 被继承的...
    无沣阅读 1,436评论 2 4
  • 现在接受高等教育的人很多,到处是本科,硕士,博士,因为读了二十几年书,觉得自己知识还可以,能力还不错,虽然在找工作...
    始于阅读 393评论 0 1
  • 讲师自我介绍,是讲师在课程前暧场破冰的重要环节,可以说非常非常重要,因为学员对讲师的第一印象,将直接影响整个课程的...
    万能的老J阅读 3,312评论 6 11