这下需要掌握的就是类型转换,类的构造器,判断类型,异常,异常的处理,defer,范型,约束
加速刷代码

 import Foundation

 /*   类型转换
1.利用类的构造器进行转换
2.系统可能提供一些特定的类型专门用来进行类型转换
3.as? 和as! 类型判断 is 和=== */ //let i = 5
//let stri = String(i)
//
//class A {
// func am(){
//
// }
//}
//class B: A {
// func bm() {
//
// }
//}
//class C {
//
//}
//
//let ins: A = B()
//let insb = ins as? B
//let insb2 = ins as! B
//insb2.bm()
//if insb == nil {
// print("faill")
//}
//
//if let z = ins as? B {
//
//}
//
//if ins is A {
// print("is a ...")
//}
//
//if ins is B {
// print("is b")
//}
//
//let ins3 = B()
//let ins4 = B()
//let ins5 = ins3
//if ins3 === ins5 {
// print("true...")
//} //实现了Error接口的类型称之为异常
//swift 中一般用枚举类型来实现
//enum MyEx: Error {
// case Blank
// case Length
//}
//func login(pwd: String) throws -> Bool {
//
// if pwd.isEmpty {
// throw MyEx.Blank
// }
// if pwd == "abc"{
// return true
// }
// else {
// return false
// }
//}
//
//
//
////do
////{
//// //调用可能抛出异常的方法,必须加try来调用
//// let result = try login(pwd: "")
////} catch MyEx.Blank {
//// print("blank....")
////}
//
//
////do
////{
//// let result = try login(pwd: "")
////} catch {
//// print(error) //隐藏的异常对象
////}
//
////第二种处理异常的方法,就是不处理,直接抛出
//func callThrow() throws {
// try login(pwd: "a")
//}
//
//
////Void?
////try? 自己确定不会所调用的方法,不会抛出异常
////也不关心方法返回结果
////let result = try? callThrow()
////if result == nil {
//// print("pao")
////
////}
////
//// print(result)
//
////let result = try! callThrow()
////if result == nil {
//// print("pao")
////
////}
////
////print(result)
//
//
////defer是函数里面最后执行的
////多个defer,其执行顺序与出现的顺序相反
////如果方法抛出了异常,defer仍然不会执行
//
//func deferDemo() throws{
// print("before")
// throw MyEx.Blank
// defer {
// print("first defer")
// }
// defer {
// print("second defer")
// }
// print("after")
//}
//func deferDemo2 (){
// let f: FileHandle
// defer {
// f.close()
// }
//} //开始使用这种对象的一系列方法
//
/** 泛型 */
func swapInt(a: inout Int,b: inout Int ) {
let temp = a
a = b
b = temp
}
var first =
var second =
swapInt(a: &first, b: &second)
print(first)
print(second) func swapString(a: inout String,b: inout String ) {
let temp = a
a = b
b = temp
} var firststr = "a"
var secondStr = "b"
swapString(a: &firststr, b: &secondStr) func swapData<T>(a: inout T,b: inout T) {
let temp = a
a = b
b = temp
} var doublea = 5.5
var doubleb = 6.6
let result = swapData(a: &doublea, b: &doubleb) print(doublea)
print(doubleb) struct IntStack {
var container = [Int]()
mutating func push(data: Int) {
container.append( data)
} mutating func pop() ->Int {
return container.removeLast()
}
} var mystack = IntStack()
mystack.push(data: )
mystack.push(data: )
mystack.push(data: )
print(mystack)
mystack.pop()
print(mystack) struct Stack<T> {
var items = [T]() mutating func push(data: T) {
items.append(data)
} mutating func pop()-> T {
return items.removeLast()
}
}
protocol MyC {
var data: Int{get set}
}
class A:MyC {
var data:Int =
}
class B:MyC {
var data:Int =
}
class C {
var data:Int =
}
func sumData<T: MyC>(a: T,b: T) -> Int {
let sum = a.data + b.data
return sum
}
//约束的语法:T:父类或接口
//多个类型参数之间用逗号,比如T和U
func sumData2<T: MyC,U:MyC>(a: T,b: U) -> Int {
let sum = a.data + b.data
return sum
}
let ains = A()
let bins = B()
let cins = C() //sumdata,因为2个参数用的是同样的T,意味
//着,a和b必须是同样类型的实例,而不能是实现同样接口的不同类型的实例
let result22 = sumData(a: ains, b: ains)
print(result22) let result33 = sumData2(a: ains, b: bins)
print(result33) //下面因为c没有实现接口,所以不能调用
//let result44 = sumData2(a: cins, b: cins)
//print(result44) //利用assocatedType来实现泛型接口的样子
protocol Containter {
associatedtype XXXX //关联类型
func append(data: XXXX) } struct MyContainer<T>: Containter {
//typealias XXXX = T
func append(data: T) { } }
/*
接口中的associatedType有两种作用
一种是当成泛型接口的用,比如上面的例子 还有一种用途,只是在接口中声明一个类型而已
在其实现类中,通过typealias把其真正关联中
某一个具体的类型
*/
struct AAA: Containter {
// typealias XXXX = Int
func append(data: Int) { } } //泛型接口与类的扩展
extension Stack {
func count() -> Int {
return items.count
}
}

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语言之课时六

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

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

    过了几天没来理博客了,这次我们要讲的有:类,属性,初始化init(),初始化器,构造器等 直接刷代码了....... //: Playground - noun: a place where peop ...

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

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

  7. iOS之Swift语言的学习

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

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

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

  9. 苹果新的编程语言 Swift 语言进阶(七)--枚举、结构、类

    Swift语言中,具有类特征的类型包括三种,即枚举类型.结构类型(包括基本类型,基本类型实际都是结构类型的特例).类.其中枚举类型.结构类型是属于值类型,类属于引用类型.三种类型都可以添加属性.方法. ...

随机推荐

  1. Js中JSON数据交换使用总结

    Json格式简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是JavaScript原 ...

  2. eclipse @override注解出错

    在工程中新建了一个接口,定义了一个methodA,然后写一个接口类实现该方法,并加上@override注解 项目提示@override出错,必须覆盖原方法XXX,解决办法 1)项目右键-project ...

  3. CORS 协议(跨域资源共享)

      跨域问题 只要协议.域名.端口有任何一个不同,都被当作是不同的域.   为什么会有跨域的限制? 之前发生过的一些跨域安全事件: 新浪微博XSS受攻击事件 2011年6月28日晚,新浪微博出现了一次 ...

  4. linux php bom

    之前都是用cleanbom.php来去除BOM的.今天运行提示没有异常文件,但是用Fiddler还是看到了EF BB BF,删除缓存也无效,将cleanbom.php上传到生产环境也提示没有异常. 这 ...

  5. Tiny_4412的NFS挂载

    设备连接:          交叉网线          串口线          usb线          电源线 网络设置: 笔记本ubuntu:wifi处,设置IPv4设置“仅本地连接”,不要 ...

  6. Unity3D NGUI 给button按钮添加单间事件

    Unity3D中, NGUI 给button按钮添加单间事件的方法很多,在这里只给推荐一种比较常用的方法. 推荐方法:使用UIListener. 1.给button组价添加上UIListener.选择 ...

  7. OpenGL ES 中的模板测试

    模板测试的主要功能是丢弃一部分片元,相对于深度检测来说,模板测试提出的片元数量相对较少.模板测试发生在剪裁测试之后,深度测试之前. 使用模板测试时很重要的代码提示: 1.glClear( GL_STE ...

  8. PHP5.3、PHP5.4下安装ZendOptimizer或Zend Guard Loader的方法

    现在很多PHP程序都需要ZendOptimizer环境,但是ZendOptimizer在PHP5.2之后已经被支持,那怎么办,Zend也不会这么做,原来PHP5.3开始ZendOptimizer正式改 ...

  9. Div添加阴影效果

    -moz-box-shadow: 2px 2px 10px #909090;/*firefox*/ -webkit-box-shadow: 2px 2px 10px #909090;/*safari或 ...

  10. linux(Debian) 中的cron计划任务配置方法

    cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情.用crontab配置是针对某个用户的 ...