过了几天没来理博客了,这次我们要讲的有:类,属性,初始化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. linux mint 崩溃

    换完linux mint 今天突然崩溃了.出现如下错误 因为是双屏.一个屏幕显示一般,这么不重要.搜了一下,找到解决方案 解决办法 ctrl+atl+f1 login sudo apt-get ins ...

  2. SQL判断某列中是否包含中文字符、英文字符、纯数字 (转)

    一.包含中文字符 select * from 表名 where 列名 like '%[吖-座]%' 二.包含英文字符 select * from 表名 where 列名 like '%[a-z]%' ...

  3. Linux 权限设置

    一.文件和目录权限 在Linux系统中,用户可以对每一个文件或目录都具有访问权限,这些访问权限决定了谁能访问,以及如何访问这些文件和目录. 1.文件权限简介 在Linux系统中,每一位用户都有对文件或 ...

  4. js截取url的参数(转自。。)

    用JS获取地址栏参数的方法(超级简单) 方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!) function GetQueryString(name) {      var reg ...

  5. Winform Textbox MultiLine和WordWrap属性的使用

    突然用到,有些不明白,零乱记录下: 1.MultiLine属性为True时,Dock属性Fill值才能达到所需效果 2.MultiLine属性为False时,WordWrap属性也是无效果的,同1,T ...

  6. Linux进阶文件系统管理之RAID

    RAID 1.引言 RAID全称Redundant Arrays of Inexpensive Disks / Redundant Arrays of Independent Disks,即独立冗余磁 ...

  7. 关于 JavaScript prototype __proto__ 一点总结

    http://www.cnblogs.com/wbin91/p/5265163.html 先上代码 function(y) Foo{ this.y = y;} Foo.prototype.x = 10 ...

  8. 通过Fiddler修改包

    1.修改Request 命令行键入: bpu URL 优缺点:对单个URL打断点.不影响其他接口. 用途:可以修改客户端对服务器发送的请求,通过修改成不同的参数,验证服务器响应是否正确.通常用于模拟客 ...

  9. 7、SQL Server索引、表压缩

    索引 什么是索引? 索引是一种磁盘上的数据结构,建立在表或视图的基础上.使用索引可以使数据的获取更快更高校,也会影响其他的一些性能,如插入或更新等. 索引主要分为两种类型:聚集索引和非聚集索引. 字典 ...

  10. java守护线程的理解

    package daemonThread; /*setDaemon(true)方法将线程设置为守护线程,线程的Daemon默认值为false * 只要当前JVM实例中存在任何一个非守护线程没有结束,守 ...