IOS系列swift语言之课时七

时间:2022-09-08 18:21:59

这下需要掌握的就是类型转换,类的构造器,判断类型,异常,异常的处理,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. bzoj 2756奇怪的游戏

    2756: [SCOI2012]奇怪的游戏 Time Limit: 40 Sec  Memory Limit: 128 MB Description Blinke 最近喜欢上一个奇怪的游戏. 这个游戏 ...

  2. pom&period;xml 样例

    <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven ...

  3. How to tile small texture image onto page as its background

    You don’t need to set a big size image as the background of pages if the image is texture or uniform ...

  4. HTML5 video 支持air play

    < video src="/path/to/video.mp4" x-webkit-airplay="allow" preload controls&gt ...

  5. java 16-6 泛型

    ArrayList存储字符串并遍历 我们按照正常的写法来写这个程序, 结果确出错了. 为什么呢? 因为我们开始存储的时候,存储了String和Integer两种类型的数据. 而在遍历的时候,我们把它们 ...

  6. git 错误

    1  执行  Git add  somefile 的时候,出现 如下 错误: If no other git process is currently running, this probably m ...

  7. JAVA wait&lpar;&rpar;&comma; notify&lpar;&rpar;&comma;sleep具体解释

    在CSDN开了博客后,一直也没在上面公布过文章,直到前一段时间与一位前辈的对话,才发现技术博客的重要,立志要把CSDN的博客建好.但一直没有找到好的开篇的主题,今天再看JAVA线程相互排斥.同步的时候 ...

  8. &lowbar;ConnectionPtr&period;CreateInstance&lpar;&lowbar;&lowbar;uuidof&lpar;Connection&rpar;&rpar;&ldquo&semi;不支持此接口&rdquo&semi;错误解决

    最近在换了win7 64位的系统,今天突然发现以前写的ADO连接数据库的代码编译后在windows2003下会执行到: _ConnectionPtr.CreateInstance(__uuidof(C ...

  9. 读书笔记 effective c&plus;&plus; Item 36 永远不要重新定义继承而来的非虚函数

    1. 为什么不要重新定义继承而来的非虚函数——实际论证 假设我告诉你一个类D public继承类B,在类B中定义了一个public成员函数mf.Mf的参数和返回类型并不重要,所以假设它们都是void. ...

  10. 二、Ansible中playbook的变量

    先看看debug模块的使用: msg:输出调试信息 var:将某个任务执行的输出作为变量传给debug模块,debug模块将其打印输出 verbosity:debug的任务级别   1:在playbo ...