import Foundation

/*
可能失败构造器的传播(调用)
1.可能失败的构造器可以调用同一个类中的普通构造器
2.普通构造器不能调用同一个类中的可能失败构造器
3.结构体中, 普通构造器却可以调用同一个结构体中可能失败的构造器 可能失败构造器的重写
1.子类可以用可能失败的构造器或者普通的构造器重写父类中的可能失败的构造器
2.子类的普通构造器不能向上调用父类的可能失败的构造器
3.子类的可能失败的构造器可以调用父类的可能失败的构造器
*/ class Person { var name: String = "" // 定义指定构造器
init(){ } // 定义可能失败构造器
init?(name: String) {
if !name.isEmpty {
self.name = name
} else {
print("构造失败")
return nil
}
}
} class Man: Person { var sex = "男" // 使用普通构造器重写父类的构造器
override init(name: String) {
// 由于该构造器是普通构造器, 因此不能调用父类的显式(?)可能失败的构造器
// 可以调用父类的隐式(!)可能失败的构造器 或 调用父类中的普通构造器
super.init()
} // 定义可能失败构造器
init!(name: String, sex: String) {
// 子类中的可能失败构造器可以调用父类的可能失败构造器
super.init(name: name)
if sex == "其他" {
print("构造失败")
return nil
}
self.sex = sex
}
} let p1 = Man(name: "")
print(p1)
let p2 = Man(name: "rinpe", sex: "男")
print(p2 == nil)
let p3 = Man(name: "", sex: "女")
print(p3 == nil)

  

最新文章

  1. java 多线程 1 线程 进程
  2. Eclipse编程时的快捷键总结
  3. C# winform窗体设计-通过条件查询数据
  4. Unity3D SceneView Camera
  5. [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大
  6. spring+mybatis
  7. Facade模式和Mediator模式
  8. UVA 1513 Movie collection
  9. Time.deltaTime和Time.realtimeSinceStartup
  10. JDBC操作数据库的学习(1)
  11. 看看我做的一款 时间轴 插件 timegliderJs
  12. ChatterBot之快速入门01
  13. Oracle创建用户、角色、授权、建表
  14. python3.6+selenium3.13 自动化测试项目实战一
  15. consul 集群
  16. Network - 互联网协议简介
  17. Zabbix系列之六——添加web监测
  18. Linux 配置 hosts
  19. 在 Unity 中基于 Oculus DK1 的开发
  20. 面向切面编程--AOP(转)

热门文章

  1. Android webview 应用
  2. HTML滚动条
  3. java中ExecutorService接口
  4. android ConnectivityManager 检查是否有网络
  5. recovery编译学习笔记
  6. MSP430 中断优先级
  7. Head First --- Python 第一章
  8. grunt serve Warning: Running "sass:server" (sass) task
  9. hosting company 的 mail , localhost send 不到
  10. Intel hex 文件格式解密