这下需要掌握的就是类型转换,类的构造器,判断类型,异常,异常的处理,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. Bash Shell 获取进程 PID

    转载地址:http://weyo.me/pages/techs/linux-get-pid/ 导读 Linux 的交互式 Shell 与 Shell 脚本存在一定的差异,主要是由于后者存在一个独立的运 ...

  2. 多个Jdk版本(转)

    window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法 本机已经安装了jdk1.7,而比较早期的项目需要依赖jdk1.6,于是同时在本机安装了jdk1.6和jdk1.7. 安装 ...

  3. Codeforces 730I [费用流]

    /* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给两行n个数,要求从第一行选取a个数,第二行选取b个数使得这些数加起来和最大. 限制条件是第一行选取了某个数的条件下,第二行不能选取对应位置的数. ...

  4. HUD 4007 [扫描线][序]

    /* 大连热身B题 不要低头,不要放弃,不要气馁,不要慌张 题意: 坐标平面内给很多个点,放置一个边长为r的与坐标轴平行的正方形,问最多有多少个点在正方形内部. 思路: 按照x先排序,然后确定x在合法 ...

  5. 关于PetaPoco的T4模板使用

    PetaPoco是一款适用于.Net 和Mono的微小.快速.单文件的微型ORM.PetaPoco介绍:http://www.cnblogs.com/youring2/archive/2012/06/ ...

  6. html css javascript 加载的顺序

    html /css /javascript 这三者的加载顺序影响整个页面的加载速度.而加载速度的快慢直接影响pv(访问量),而且会影响经济收入.在大网站中,可能打开速度快一秒,一年能多带来上亿的收入. ...

  7. shell 命令集

    shell 常用知识点--------------------------------------- sed 用法 http://www.cnblogs.com/edwardlost/archive/ ...

  8. linux svn hooks代码自动更新至项目

    由于开发移动端web,ui需要及时看到样式变化,所以通过svn hooks(钩子)来提交文件,然后再把文件同步到测试服务器项目目录,步骤如下: 1.进入 /home/svn/cmall/hooks ( ...

  9. C#利用WIN32实现按键注册

    using System.Runtime.InteropServices; using System.Collections.Generic; using System; using System.W ...

  10. android layout布局属性

    参考:http://blog.csdn.net/msmile_my/article/details/9018775 第一类:属性值 true或者 false           android:lay ...