这下需要掌握的就是类型转换,类的构造器,判断类型,异常,异常的处理,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. [转]uboot中SPL作用

    转:http://blog.csdn.net/voice_shen/article/details/17373671 这篇文章写的非常详细 [u-boot: 2014.01-rc1] 本文将使用sam ...

  2. 一次Redis的使用Bug记录(exec)

    博主在一次项目中,使用了工具类中的Redis类,因为该Redis没有封装管道pipeline和exec命令,所以就大笔一挥来了一段__call; 代码如下(其中$this->_connect() ...

  3. [AIR] 打开我的电脑

    import flash.filesystem.File; import flash.desktop.NativeProcess; import flash.desktop.NativeProcess ...

  4. Oracle数据库体系结构及创建表结构

    Oracle服务器主要由实例.数据库.程序全局区和前台进程组成,其中实例就是用来提供管理数据库的功能:数据库由数据库文件组成,用来存储系统数据:实例可以进一步划分为系统全局区(SGA)和后台进程(PM ...

  5. 关于MariaDB5.5不是有效的Win32 应用程序

    操作系统:Windows XP sp3 数据库:MariaDB 5.5.49 问题原因: 使用文本编辑器打开mysqld.pdb文件. 在13行1012列,会发现如下信息: 这说明v5.5.49是使用 ...

  6. AE开发示例之RunGPAsync

    using System; using System.Collections.Generic;using System.ComponentModel;using System.Data;using S ...

  7. js判断是否是移动设备登陆网页

    var browser = {            versions: function () {                var u = navigator.userAgent, app = ...

  8. echarts学习网站

    echarts : http://echarts.baidu.com/echarts2/doc/example.html 相关脚本学习网站:http://www.jb51.net/html/list/ ...

  9. php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法

    1.获取上个月第一天及最后一天.    echo date('Y-m-01', strtotime('-1 month'));    echo "<br/>";     ...

  10. Orcle基本语句(四)

    --显示员工的编号,姓名,工资,工资级别,所在部门的名称;(使用emp表) SELECT * FROM emp; SELECT * FROM salgrade; SELECT * FROM dept; ...