IOS系列swift语言之课时七
这下需要掌握的就是类型转换,类的构造器,判断类型,异常,异常的处理,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语言之课时七的更多相关文章
- IOS系列swift语言之课时二
今天我们要讲的就是函数[对于函数,在最后面还有几道题,喜欢的博友可以看了自己做一下,和我交流一下] 当然这与我们的c语言还是有一定的共同之处的,对于有一些c语言或者是java基础的童鞋,我觉得是很容易 ...
- IOS系列swift语言之课时八
这节课需要讲的就是可选链,内存管理,引用计数,unowned解决 //: Playground - noun: a place where people can play import UIKit / ...
- IOS系列swift语言之课时三
今天需要掌握的内容就是:闭包.类.结构体.属性(计算属性和延迟属性) 同样里面有一些题目,有兴趣的可以做一下. 首先我们需要知道什么是闭包?所谓的闭包就是一个代码块(一般是指函数以及被它捕获的成员变量 ...
- IOS系列swift语言之课时六
这节课需要讲的就是协议,方法,委托模式(依赖倒转) 代码刷起中...... // // main.swift // ExAndProtocol // // Created by David on 23 ...
- IOS系列swift语言之课时五
过了几天没来理博客了,这次我们要讲的有:类,属性,初始化init(),初始化器,构造器等 直接刷代码了....... //: Playground - noun: a place where peop ...
- IOS系列swift语言之课时四
今天我们要讲的主要有:下标.可为空的类型.枚举(特殊的枚举:递归枚举).原生值.关联值 首先来分析一下这个下标,就是说我们可以通过下标找到对应的值或者是改变对应的值. 其次是可为空的类型,我们要牢记所 ...
- iOS之Swift语言的学习
好久都没有来这个熟悉而又陌生的地方啦, 想想已经有两三个月了吧,不过我相信以后还是会经常来的啦,因为忙碌的学习已经过去啦,剩下的就是要好好的总结好好的复习了,好好的熟悉下我们之前学习的知识点,将他们有 ...
- iOS使用Swift语言检查并提示更新
项目要上线了,产品要求跟安卓一样,一进去有一个提示框提示更新.虽然苹果在 Settings/iTunes Store & App Store 选项中有自动更新这一选项,而且添加版本号等等有被拒 ...
- 苹果新的编程语言 Swift 语言进阶(七)--枚举、结构、类
Swift语言中,具有类特征的类型包括三种,即枚举类型.结构类型(包括基本类型,基本类型实际都是结构类型的特例).类.其中枚举类型.结构类型是属于值类型,类属于引用类型.三种类型都可以添加属性.方法. ...
随机推荐
- mysql replication
change master to master_host='192.168.0.3',master_user='myrepl',master_password='5rNUnOHxut3lkP4wXds ...
- php 对象中连贯执行方法
连贯操作的重点是返回当前对象,以便可以继续执行 class Ceshi{ public $str = ''; public function f1($a){ $this->str .= $a; ...
- php extract 函数的妙用 数组键名为声明为变量,键值赋值为变量内容
extract 函数的妙用 数组键名为声明为变量,键值赋值为变量内容 它的主要作用是将数组展开,键名作为变量名,元素值为变量值,可以说为数组的操作提供了另外一个方便的工具
- Python基础(二)之集合
集合以{}形式表现,一个集合中的元素各不相同,即集合体现为去重的特性.主要用于关系测试,常见的集合操作:交集.并集.插件.子集.父集.对称差集等. 设置集合: list_1 = [1,3,4,5,7, ...
- 基于redis分布式锁实现“秒杀”
转载:http://blog.5ibc.net/p/28883.html 最近在项目中遇到了类似“秒杀”的业务场景,在本篇博客中,我将用一个非常简单的demo,阐述实现所谓“秒杀”的基本思路. 业务场 ...
- C# 6.0可能的新特性及C#发展历程
据扯,C# 6.0在不远的将来就发布了,对应的IDE可能是VS 2014(.Net Framework 5.0),因为VS 2013已于2013年10月份发布了,对应的是.Net Franework ...
- qt 环境下mapx组件的鼠标跟踪
经过两天的研究mapx组件人坐标转换还是没有转换成功,因为不管怎么变,定点转换的经纬度坐标始终与期望的值有较大的偏差.最后还是想老大请教了一下,划了半天功夫就研究出来了(不愧是老大,仰慕之情犹如滔滔江 ...
- Entity Framework学习笔记——记一个错误解决方式及思路
继续之前设定的学习目标前,先来一篇小小的外篇.按照第一篇里的配置方式配置好的工程前两天还能正常工作,昨天却突然无法通过Add-Migration命令进行数据库的升级.错误信息如下: System.Da ...
- windows下sass安装 以及一些要注意的问题
都说sass 环境难配其时也没那么难 按照以下步骤一下一下来还是挺快的 如果你是喜欢less 那就当我没说 233333 1.sass 是基于ruby这门语言的需要使用 rubygem这个包管理器安装 ...
- Tcp/IP
在数据传输完毕之后,通信双方都可以发出释放连接的请求.释放连接的过程为如上图所示: 1)数据传输结束后,主机A的应用进程先向其TCP发出释放连接请求,不在发送数据.TCP通知对方要释放从A ...