过了几天没来理博客了,这次我们要讲的有:类,属性,初始化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. Stanford NLP 学习笔记2:文本处理基础(text processing)

    I. 正则表达式(regular expression) 正则表达式是专门处理文本字符串的正式语言(这个是基础中的基础,就不再详细叙述,不了解的可以看这里). ^(在字符前): 负选择,匹配除括号以外 ...

  2. problem during schema create,statement create sequence act_evt_log_seq

    今天在调试程序的时候出现"problem during schema create,statement create sequence act_evt_log_seq"这个错误,跟 ...

  3. ./upload/source/class/class_core.php

    定义了core这个类 error_reporting(E_ALL); error_reporting() 设置 PHP 的报错级别并返回当前级别.可以参考手册. define('IN_DISCUZ', ...

  4. spark-shell和scala错误

    运行spark-shell 或者scala命令,出现以下错误: Welcome to Scala version 2.10.6 (Java HotSpot(TM) 64-Bit Server VM, ...

  5. NOIP复赛

    [代码为王] http://www.cnblogs.com/codeisking [洛谷] http://www.luogu.org/ NOIP2015 金币 扫雷游戏 求和 推销员 枚举 数学 优先 ...

  6. RDD常用方法之subtract&intersection&cartesian

    subtract Return an RDD with the elements from `this` that are not in `other` .     def subtract(othe ...

  7. 推荐几个最好用的CRM软件,本人亲测

    CRM是英文Customer Relationship Management 的简写,一般译作“客户关系管理”.CRM最早产生于美国,由Gartner Group 首先提出的CRM这个概念的.20世纪 ...

  8. Struts2中使用OGNL

    链接:Struts标签库 OGNL(Object Graphic Navigatino Language) OGNL称为对象图导航语言.以一个对象为根(起点),通过OGNL可以访问与这个对象关联的其它 ...

  9. MVC中使用内建的HTML辅助方法产生表单元素提交表单与button按钮事件的陷阱

    网站模板页有个登陆的退出按钮,当点击时跳转到登陆页面. <button onclick="logout()" >退出</button> $("#l ...

  10. urlparse

    urlparse模块 urlparse主要是URL的分解和拼接,分析出URL中的各项参数,可以被其他的URL使用,而且只在python2.7中存在,python3中是在urllib包下的urllib. ...