IOS系列swift语言之课时五
过了几天没来理博客了,这次我们要讲的有:类,属性,初始化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语言之课时五的更多相关文章
- IOS系列swift语言之课时二
今天我们要讲的就是函数[对于函数,在最后面还有几道题,喜欢的博友可以看了自己做一下,和我交流一下] 当然这与我们的c语言还是有一定的共同之处的,对于有一些c语言或者是java基础的童鞋,我觉得是很容易 ...
- IOS系列swift语言之课时八
这节课需要讲的就是可选链,内存管理,引用计数,unowned解决 //: Playground - noun: a place where people can play import UIKit / ...
- IOS系列swift语言之课时三
今天需要掌握的内容就是:闭包.类.结构体.属性(计算属性和延迟属性) 同样里面有一些题目,有兴趣的可以做一下. 首先我们需要知道什么是闭包?所谓的闭包就是一个代码块(一般是指函数以及被它捕获的成员变量 ...
- IOS系列swift语言之课时七
这下需要掌握的就是类型转换,类的构造器,判断类型,异常,异常的处理,defer,范型,约束加速刷代码 import Foundation /* 类型转换 1.利用类的构造器进行转换 2.系统可能提供一 ...
- IOS系列swift语言之课时六
这节课需要讲的就是协议,方法,委托模式(依赖倒转) 代码刷起中...... // // main.swift // ExAndProtocol // // Created by David on 23 ...
- IOS系列swift语言之课时四
今天我们要讲的主要有:下标.可为空的类型.枚举(特殊的枚举:递归枚举).原生值.关联值 首先来分析一下这个下标,就是说我们可以通过下标找到对应的值或者是改变对应的值. 其次是可为空的类型,我们要牢记所 ...
- iOS之Swift语言的学习
好久都没有来这个熟悉而又陌生的地方啦, 想想已经有两三个月了吧,不过我相信以后还是会经常来的啦,因为忙碌的学习已经过去啦,剩下的就是要好好的总结好好的复习了,好好的熟悉下我们之前学习的知识点,将他们有 ...
- 苹果新的编程语言 Swift 语言进阶(五)--控制流
Swift 语言支持C语言全部的控制语句.包含for 和while循环语句,if和switch条件语句,以及break和continue控制语句等. Swift 语言除了支持以上语句,还添加了一个f ...
- iOS使用Swift语言检查并提示更新
项目要上线了,产品要求跟安卓一样,一进去有一个提示框提示更新.虽然苹果在 Settings/iTunes Store & App Store 选项中有自动更新这一选项,而且添加版本号等等有被拒 ...
随机推荐
- jsgen 搭建
1,mongodb 2,redis http://www.cnblogs.com/lxx/archive/2013/06/04/3116985.html http://blog.csdn.net/w ...
- (.text+0x12): undefined reference to `rpl_fprintf'
问题1:(.text+0x12): undefined reference to `rpl_fprintf'解决办法:在yacc前面添加%{#undef yyerrorvoid yyerror (ch ...
- IOPS-百度百科
IOPS (Input/Output Operations Per Second),即每秒进行读写(I/O)操作的次数,多用于数据库等场合,衡量随机访问的性能.存储端的IOPS性能和主机端的IO是不同 ...
- (Collection)350. Intersection of Two Arrays II
/* Given two arrays, write a function to compute their intersection. Example: Given nums1 = [1, 2, 2 ...
- 尚学堂Spring视频教程(三):Spring Core中的其他特性
集合装配 如果bean中有一些集合属性,配置文件的配置如下 package com.bjsxt.dao.impl; import java.util.List; import java.util. ...
- Linux中exit与_exit的区别
在exit,_exit的区别 - exit()与_exit()函数的区别(Linux系统中)2012-03-20 15:19:53 分类: LINUX 注:exit()就是退出,传入的参数是程序退出时 ...
- Javascript中判断变量是 array还是object(是数组还是对象)
段文字是从github上截取由本人翻译过来的. 原文地址:https://github.com/nathansmith/javascript-quiz/blob/master/ANSWERS.md 怎 ...
- ios 设置声音和震动,单独控制
一.今天项目中涉及了设置这快的声音震动和响铃,搞的头大,以前搞过,只是简单的调用系统的方法就可以实现,但是现在的公司要求,震动是震动,响铃是响铃,我看了微信,微信也是的分开的,做的很好,但是我就纳闷了 ...
- 软件测试之loadrunner学习笔记-02集合点
loadrunner学习笔记-02集合点 集合点函数可以帮助我们生成有效可控的并发操作.虽然在Controller中多用户负载的Vuser是一起开始运行脚本的,但是由于计算机的串行处理机制,脚本的运行 ...
- System.Threading.Timer 定时器的用法
System.Threading.Timer 是C# 中的一个定时器,可以定时(不断循环)执行一个任务.它是在线程上执行的,具有很好的安全性.为此 .Net Framework 提供了5个重载的构造 ...