Swift语言里的泛型与异常处理

我感觉泛型挺难,希望对你们有帮助

//一个泛型a,b值交换的列子,可以传入什么类型

func mySwap<T>(inout a: T,inout b: T) {

let temp = a

a = b

b = temp

}

var a = 111

var b = 222

mySwap(&a, b: &b)

//普通整形a,b值交换列子,只能传入整形

func mySwap2(inout a: Int,inout b: Int) {

let temp = a

a = b

b = temp

}

var z = "aa"

var y = "bb"

//mySwap2(&z, b: &y)这里报错了,因为这里指定了必须是整形才能进行交换

//Swift<泛型> 模拟实现入栈出栈

//struct Stack<Element> {

//    var containers = [Element]()

//    mutating func push(e:Element) {

//        containers.append(e)

//    }

//    mutating func pop() ->Element {

//        return containers.removeLast()

//    }

//}

//

//var data: Stack<Int> = Stack<Int>()

//data.push(1)

//data.push(2)

//data.push(3)

//data.pop()

//加入我们要对一个泛型进行扩展,我们只需要写泛型名就好,不要写<>里面的参数了

//extension Stack {

//    var conut: Int {

//        return containers.count

//    }

//}

//

//var data2 = Stack<String>()

//

//data2.push("adas")

//data2.push("dasdasd")

//data2.conut

//泛型约束

//普通的计算下标的函数

//func index(arr: [Int],data: Int) ->Int {

//    for(a,b) in arr.enumerate() {

//        if b == data {

//            return a

//        }

//    }

//    return -1

//}

//

//let array = [1,4,5,6,3]

//index(array, data: 3)

//泛型的实现方式

//泛型是不可以使用== 必须继承系统的这个协议Equatable

protocol IA{

}

protocol IB{

}

extension Int: IA,IB{

}

func index<T:Equatable where T:IA,T:IB>(arr:[T],data: T) ->Int {

for (m,n) in arr.enumerate() {

if n == data  {

return m

}

}

return -1

}

let array2 = [1,3,8,2]

index(array2,data:8)

class Person {

var salary = 0

}

func calc<T: Person>(persons:[T]) -> Int {

var total = 0

for p in persons {

total += p.salary

}

return total

}

//协议的关联类型

//协议的关联类型(associative type)

protocol Containter {

typealias Element

mutating func push(e: Element)

mutating func pop()-> Element

}

struct MyStack: Containter{

//       typealias Element = Int

var containers = [Int]()

mutating func push(e: Int) {

containers.append(e)

}

mutating func pop() -> Int {

return containers.removeLast()

}

}

struct Stack<Element>: Containter {

//按照当前的实现,下面的代码由于类型推断,可以省略

//    typealias Element = E

var containers = [Element]()

mutating func push(e: Element) {

containers.append(e)

}

mutating func pop() -> Element {

return containers.removeLast()

}

}

typealias MyInt = Int //给Int取个别名

let i: MyInt = 3

typealias s = String

let ss: s = "121212"

//扩展协议时的约束以及与协议关联类型的使用

protocol MM {

}

class MMClass: MM {

}

protocol NN : MM{

}

class NNClass: NN {

}

protocol Container {

typealias ItemType

}

extension Container where   ItemType: MM {

var b: Int {return 5}

}

extension Container where   ItemType: NN {

var b: Int {return 6}

}

class TestTest: Container {

typealias ItemType = MMClass //如果这里改为MMClass,那么aaaa.b输出结构是5

}

class TestTest2: Container {

typealias ItemType = Int

}

let aaaa  = TestTest2()

//aaaa.b    报错

//Swift的修饰符  默认都是internal

internal class TestModifier {

func m() {

}

}

let tu = (TestModifier(),"aa")

//异常  Swfit异常处理有四种方式

//创建自己的异常,也是就错误类

enum PasswordError: ErrorType {

case LengthIsNotEnough

case TooSimple

}

//第一种 抛出去

func validatePwd(pwd: String)throws -> Bool {

let count1 = pwd.characters.count

if count1 < 6 {

throw PasswordError.LengthIsNotEnough

}

if count1 > 10 {

throw PasswordError.TooSimple

}

return true

}

//第二种 解决

do {

//可以写多行代码

try validatePwd("dasdasd")

//可以写多行代码

}catch {

print("error")

}

//第三种

let result = try?validatePwd("dadada")

if result == nil {

print("调用时出错")

}

//第四种

let result2 = try! validatePwd("dasdhua")

//defer有点类似异常处理中得finally,但是他也是可以用在非异常处理的情况

func m() {

print("你好")

defer {

print("你们好")

}

print("大家好")

}

m()

时间: 2024-10-12 20:44:48

Swift语言里的泛型与异常处理的相关文章

Swift语言的初步涉及

第二课学习了一些Swift的基本类型和流程控制语句 Xcode环境配置完成后,创建了第一项目,首先提出的是一个问题,main在哪里,在Swift语言中main是作为一个类表现出来,相当与一个带头大哥,一个主类,Swift语言里的任何类的属性.方法.对象都要放到main类来实现. 一.基本类型 1.基础 在Swift语言里let声明的是常量,var声明的是变量类型 列如:let l = 1 ; var v = 2 ; var定义的v变量是可以在后面进行修改其的值,而let定义的l常量是不可变的.

苹果新的编程语言 Swift 语言进阶(十六)--泛型

? ? ? ? ??? ?泛型同意你定义一个宽松.可重用的函数或者类型.使用泛型能够避免代码的反复.也能以更清楚和抽象的方式来表达程序的意图. ? ? ? ? ? ?泛型是Swift语言提供的强大功能之中的一个,Swift提供的很多标准库都使用了泛型来创建,如Swift提供的数组和词典类型. 通过使用泛型,你能使用一个数组和词典来包括和存储不论什么类型的元素. ?? ? 1.1 泛型函数 ?? ? ? ? ? 使用Swift语言你能定义一个能够工作于随意类型的泛型函数.从而不必为每种类型都定义一

IOS学习之路——Swift语言(2)——基本类型与函数

一.可选型 为什么会有可选型?当一个变量被希望表示为某一个指定的类型值,同时也被希望在某种情况下表示为空.那么就需要一个可选型.Optional 可选型的语法是在Swift的基本类型后面添加 ? 符号,如 Int? String?  可选型如果取值为空,那么表示为 nil 如果想定义一个可选型的变量,那么需要显示的声明为可选型.可选型变量打印时显示Optional 可选型变量需要进行解包(unwrap)才能与其他的变量进行运算. 解包: 1. 强制解包,使用 ! 关键字,强制解包是具有风险的,当

Swift语言中的泛型编程 【Generic】【Part 1】

泛型  泛型编程让你可以编写更具扩展性.易重用的功能,代码使用时的类型取决于你所定义的业务需求.你可以编写避免重复的代码,目标更加清晰明确,风格抽象. 泛型是Swift语言的一项强大的特性,基本上所有的swift标准库都建立在泛型代码上.实际上,你在这本书的时候不知不觉地接触到泛型,它贯穿始终.例如Swift的数组和字典类型都是泛型集合.你可以创建用于存放整数值的数组,也创建数组存储字符串,其他所有能在Swift中创建的类型都可以创建到数组中.类似的,你可以创建字典来存储数值或其他指定的类型,毫

swift语言常见的问题和回答

1.如果我是个刚入门的iOS开发者,选swift学习呢,还是选objective-c学习,还是两个都学? 这个可以根据两种情况来决定:1.我想进入公司担任iOS开发的职位    2.我只想做个独立开发者,自己开发app发布. 第一种情况的话,你必须要学Objective-C,现在市面上绝大部分的app都是用oc开发的,从oc到Swift过渡是要很长一段时间的. 当然swift最好也同时要学会. 第二种情况:你不考虑兼容性(iOS7以下版本,后面会提到)的情况下,完全可以只学习swift.不过ob

Swift语言官方文档翻译(2)

A Swift Tour 按照惯例,我们一般学习一个新语言的时候,我们都习惯性的在屏幕上打印"Hello, World",在Swift中,你可以用如下一个单独语句实现 println("Hello,World") 如果你用C或者OC写过程序,那么上面的语句对于你来说是很熟悉的.在Swift中,这一行代码就是一个完整的程序,你不需要为了类似I/O或者String handling去导入一些jar包.全局变量将作为一个程序的入口点,所以你不需要main函数,你也不需要在

Swift 语言附注 类型

本页包含内容: 类型注解(Type Annotation) 类型标识符(Type Identifier) 元组类型(Tuple Type) 函数类型(Function Type) 数组类型(Array Type) 可选类型(Optional Type) 隐式解析可选类型(Implicitly Unwrapped Optional Type) 协议合成类型(Protocol Composition Type) 元类型(Metatype Type) 类型继承子句(Type Inheritance C

寒城攻略:Listo 教你 25 天学会 Swift 语言 - 24 Generics

import Foundation //*********************************************************************************************** //1.Generics(泛型) //_______________________________________________________________________________________________ //介绍 //泛型代码可以让你写出根据

SWIFT语言的概览

Swift用来写iOS和OS X程序.(估计也不会支持其它屌丝系统) Swift吸取了C和Objective-C的优点,且更加强大易用. Swift可以使用现有的Cocoa和Cocoa Touch框架. Swift兼具编译语言的高性能(Performance)和脚本语言的交互性(Interactive). Swift语言概览 基本概念 注:这一节的代码源自The Swift Programming Language中的A Swift Tour. Hello, world 类似于脚本语言,下面的代