过了几天没来理博客了,这次我们要讲的有:类,属性,初始化init(),初始化器,构造器等

直接刷代码了.......

 //: Playground - noun: a place where people can play

 import UIKit
//1.所有的值类型是不能继承的
//2.目前为止所有的类型(除了Class)都是值类型
// 比如String,数组,字典
//3. swift中是单继承
//4.官方文档中从来没有说所有类会继承于Object
//5.swift目前的版本是没有抽象类,也没有抽象方法
//6。重写时注意方法的名字,一定要加override
//final:就是阻止被重写
//class Parent {
// var p = 0
// func a(){
// print("parent a ")
// }
//
// //b(first:)
// func b(first a: Int) {
//
// }
////
//// //b(second:)
//// func b(second a: Int) {
////
//// }
//
// final func c() {
//
// }
//}
//
//class Child: Parent {
//
// //父类是一个存储属性,但子类重写成了一个计算属性
// //原因是:子类不知道父类的属性到底是存储还是计算属性
// // 它只知道属性的名字和类型
//// override var p: Int {
//// get {
//// return 5
//// }
//// set {
//// print("asdfasf")
//// }
////
//// }
//
// override var p: Int {
// didSet {
// print("p didset")
// }
// }
// override func a() {
// print("child a ")
// }
//
//
//
// func b(ss a: Int) {
//
// }
//}
//
//let ins: Parent = Child()
//ins.a()
//ins.p = 666
//ins.c() //**************初始化******************************
//1.初始化是确保一个类型的实例可以使用之前,其所有存储属性都得到正确的赋值
//struct FirstStruct {
// let a = 0
// let b: Int
// let c: Int
// var cp: Int {
// return 5
// }
//}
////关于结构,编译器会自动帮我们生成memberwise的初始化器
//
//let fs = FirstStruct(b: 1, c: 2) /*** 存储属性要么在声明的时候赋值要么就在init中赋值 ***/
struct FirstStruct {
let a =
let b: Int =
let c: Int
init() {
// c = 1
//在init中可以调用其它的init,但必须加上self
//第二个init只能在init中调用
self.init(c: ) }
init(c: Int) {
self.c = c
} }
//let ins = FirstStruct()
class Parent {
var name: String
var height: Int
//没有特殊的修饰符的init就是专门的(Designated init)初始化器,主要的作用就是确保 “所有的”存储属性得到初始化
//一般只有一个,可以有多个
init(name: String,height: Int ) {
self.name = name
self.height = height
} //便利初始化器是方便创建对象使用,它必须直接或间接调用专门初始化器
convenience init(name: String) {
self.init(name: name, height: )
}
convenience init() {
self.init(name: "weimingming")
}
}
let p = Parent()
p.name
p.height
//构造器编写的基本套路
//1.一般是只写一个专门的初始化器,用来实例化所有的存储属性
//2.可以添加任意多个便利初始化器,来直接或间接调用专门的初始化器
//3.子类也一般只创建一个专门的初始化器,用来初始化
//本类的所有存储属性
//4.子类的专门初始化器,必须调用父类的专门初始化器
//5.子类的便利初始化器,必须调用(委派,delegate)自己的专门初始化器 class Child: Parent {
var age: Int
init(age: Int){
self.age = age
super.init(name: "hexin", height: )
self.name = "xxxx"
} //子类的便利初始化器,必须委派(delegate)到自己的专门初始化器
convenience init() {
//self.init(age: 18) self.init(age: )
}
}
//
let c = Child()
c.name
c.age
c.height
//小结:1.自己的便利一定要调用自己的专门的初始化器
//2.自己的专门初始化一定要调用父类的专门 /*********** Failable init**/
class Test {
var name = ""
init?(name: String) {
if name.isEmpty {
return nil
}
self.name = name
}
} class Test2: Test {
override init(name: String) { super.init(name: name)!
}
}
let t = Test(name: " ")
if t == nil {
print("nil.......")
} //enum Gender {
// case male,female
// init?(xingbie: String) {
// switch xingbie {
// case "f":
// self = .female
// case "m":
// self = .male
// default:
// return nil
// }
// }
//}
//
//let g = Gender.male
//let g2 = Gender(xingbie: "xxx")
//if g2 == nil {
// print("xxx 不能转换为一个枚举值")
//} enum Gender: String {
case Male = "M",Female
} let g3 = Gender(rawValue: "M")
if g3 == nil {
print("xxx 不是枚举值")
}
/* Required init *****/
class Test3 {
var name = ""
//required表明此初始化器,子类必须重写(但不需要有override)子类也必须加上requried,表明子类的子类也需要重写
required init(name: String) {
self.name = name
print("test3 init...")
}
} class Test4: Test3 {
let age : Int
init(age: Int) {
self.age = age
super.init(name: "asfd")
} required init(name: String) {
self.age =
print("test3 init...")
super.init(name: name)
}
} let t4 = Test4(age: ) class LaJi {
var name = "aaa"
deinit{
print("清理工作")
}
}
//var lji: LaJi? = LaJi()
//lji = nil func xx() {
let lll = LaJi()
lll.name = "bbbb" }
xx()

IOS系列swift语言之课时五的更多相关文章

  1. IOS系列swift语言之课时二

    今天我们要讲的就是函数[对于函数,在最后面还有几道题,喜欢的博友可以看了自己做一下,和我交流一下] 当然这与我们的c语言还是有一定的共同之处的,对于有一些c语言或者是java基础的童鞋,我觉得是很容易 ...

  2. IOS系列swift语言之课时八

    这节课需要讲的就是可选链,内存管理,引用计数,unowned解决 //: Playground - noun: a place where people can play import UIKit / ...

  3. IOS系列swift语言之课时三

    今天需要掌握的内容就是:闭包.类.结构体.属性(计算属性和延迟属性) 同样里面有一些题目,有兴趣的可以做一下. 首先我们需要知道什么是闭包?所谓的闭包就是一个代码块(一般是指函数以及被它捕获的成员变量 ...

  4. IOS系列swift语言之课时七

    这下需要掌握的就是类型转换,类的构造器,判断类型,异常,异常的处理,defer,范型,约束加速刷代码 import Foundation /* 类型转换 1.利用类的构造器进行转换 2.系统可能提供一 ...

  5. IOS系列swift语言之课时六

    这节课需要讲的就是协议,方法,委托模式(依赖倒转) 代码刷起中...... // // main.swift // ExAndProtocol // // Created by David on 23 ...

  6. IOS系列swift语言之课时四

    今天我们要讲的主要有:下标.可为空的类型.枚举(特殊的枚举:递归枚举).原生值.关联值 首先来分析一下这个下标,就是说我们可以通过下标找到对应的值或者是改变对应的值. 其次是可为空的类型,我们要牢记所 ...

  7. iOS之Swift语言的学习

    好久都没有来这个熟悉而又陌生的地方啦, 想想已经有两三个月了吧,不过我相信以后还是会经常来的啦,因为忙碌的学习已经过去啦,剩下的就是要好好的总结好好的复习了,好好的熟悉下我们之前学习的知识点,将他们有 ...

  8. 苹果新的编程语言 Swift 语言进阶(五)--控制流

    Swift 语言支持C语言全部的控制语句.包含for  和while循环语句,if和switch条件语句,以及break和continue控制语句等. Swift 语言除了支持以上语句,还添加了一个f ...

  9. iOS使用Swift语言检查并提示更新

    项目要上线了,产品要求跟安卓一样,一进去有一个提示框提示更新.虽然苹果在 Settings/iTunes Store & App Store 选项中有自动更新这一选项,而且添加版本号等等有被拒 ...

随机推荐

  1. php extract 函数的妙用 数组键名为声明为变量,键值赋值为变量内容

    extract 函数的妙用 数组键名为声明为变量,键值赋值为变量内容 它的主要作用是将数组展开,键名作为变量名,元素值为变量值,可以说为数组的操作提供了另外一个方便的工具

  2. ASCIITable: 演示 Arduino 串口输出的进阶功能

    原文地址 - https://www.arduino.cc/en/Tutorial/ASCIITable ASCII字符表 本例展示了高级的串口打印功能,通过本功能可以在Arduino软件(IDE)的 ...

  3. tomcat 9.0配置管理员用户名和密码

    登录后,可以管理查看发布网站的信息,岗安装好的tomcat是没有管理密码的,可以在配置文件中修改. 在conf/tomcat-users.xml的文件中修改配置,默认的角色用户是被注销掉的.我去掉注释 ...

  4. 评论alpha版本发布

    讲解顺序: 1.  新蜂:俄罗斯方块 俄罗斯方块已经完成了核心的游戏部分,可以流畅的进行游戏,经验值功能也已经完成,目前进度很好:不足之处主要有:后续的显示内容还没完成,所以界面空出来很多板块,alp ...

  5. ndk-stack 使用(分析native代码stack)

    简介: ndk r6 版本之后开始提供该功能. 作用: ndk-stack可以把不认识的内存地址信息转换成可读的信息. 比如,把下列内容 I/DEBUG ( ): *** *** *** *** ** ...

  6. Java面向对象㈢ -- 内部类

    内部类必须要依赖于继承或实现一个接口.内部类可以实现Java多继承,内部类访问外表类的局部变量或参数时,则该局部变量或参数必须被final修饰.内部类不能包含有static的变量和方法,原因是因为内部 ...

  7. 2、SIP

    1.初学者笔记:http://www.cnblogs.com/gnuhpc/archive/2012/01/16/2323637.html 2.SIP头字段解释:http://www.cnblogs. ...

  8. 1.3 Makefile 工程管理

    1. 为什么得用Makefile 单步命令生成led.bin [root@cfm880 lesson1]# cd .. [root@cfm880 Part1]# mkdir lesson3 [root ...

  9. mapreduce核心原理

    1:第一阶段: 第一阶段的task每一个nodemanager并发运行程序,完全并发,各不影响.这就是map阶段 运行的task时maptask 2:第二个阶段的task并发实例互不相干,但是他们的数 ...

  10. Junit3断言

    在Robotium自动化测试的过程中,发现没有断言的脚本是没有意义的,现整理Junit3和Junit4的断言,供日后查阅. http://junit.org/ Junit3断言API: http:// ...