美文网首页
10、类型转换、泛型、扩展、协议

10、类型转换、泛型、扩展、协议

作者: LucXion | 来源:发表于2020-06-09 11:33 被阅读0次

类型检查 is,类似isKindOfClass,子类对象检查是否为父类的类型可以检查通过
as? 和as! 的区别,as?返回的是可选值,转换失败为nil
Any:通用类型 AnyObject:通用的引用类型
泛型

// 泛型在函数参数中的作用,多个泛型用逗号隔开
func changeTwoValue<T,J>( parama:inout T, parama2:inout T,parama3:J,parama4:J){
    let temp = parama
    parama = parama2
    parama2 = temp
}
// 定义一个泛型 + 栈结构体 (栈为单出口容器,先进后出)
struct ZStruct<Item>{
    var item:Array<Item> = []
    mutating func addItem(parama:Item){
        item.append(parama)
    }
    mutating func popItem(){
        item.removeLast()
    }
}
// 扩展:为已存在的数据类型添加功能,不需要再声明泛型
extension ZStruct {
    func getItem() -> [Item] {
        return item
    }
}

/// 泛型的限制:

// 泛型的限制:可以是协议
protocol My {
    // item可以由遵守协议的类型来定义
    associatedtype Item
    // 在协议中定义一个泛型类型的计算属性
    var type:Item{get set}
    // 在实现中第一个定义的泛型将确定协议中所有泛型的类型
    func changeType(parama:Item)->Void
}
// 泛型的限制:自定义引用类型
class Student:My {
    var type:Int {
        get{
            return 5
        }
        set{
            newValue
        }
    }
    func changeType(parama: Int) {
        print("do")
    }
    func doSome<T:Student>(parama:T)->Void{
        
    }
}

/// 泛型与where可以有更严格的约束

// where与泛型结合可以增加更严格的约束
class School<T,J> where T:My,J:My {
    
}
class Student<Item> {
    var name:Item
    init(parama:Item) {
        name = parama
    }
    func returnName()-> Item {
        return self.name
    }
}
var parama = "abc"
var stu = Student.init(parama: parama)
stu.returnName()

相关文章

  • 10、类型转换、泛型、扩展、协议

    类型检查 is,类似isKindOfClass,子类对象检查是否为父类的类型可以检查通过as? 和as! 的区别,...

  • 17-扩展

    扩展(Extension) 计算属性、下标、方法、嵌套类型 协议、初始化器 协议 泛型

  • 14-泛型

    泛型(Generics) 泛型类型 关联类型(Associated Type) 类型约束 协议类型的注意点 泛型解...

  • Swift Tour Learn (十二) -- Swift 语

    本章将会介绍 泛型所解决的问题泛型函数类型参数命名类型参数泛型类型扩展一个泛型类型类型约束关联类型泛型 Where...

  • 【Swift】泛型常见使用

    1、Swift泛型4种 泛型函数泛型类型泛型协议泛型约束 2、泛型约束3种 继承约束:泛型类型 必须 是某个类的子...

  • Swift 2 学习笔记 17.扩展和泛型

    课程来自慕课网liuyubobobo老师 扩展 扩展基础 扩展标准库 泛型函数 泛型类型

  • 转换操作符

    Cast:将非泛型的 IEnumerable 集合元素转换为指定的泛型类型,若类型转换失败则抛出异常。 ToArr...

  • Java知识点整理(3)- 泛型类

    泛型类 泛型就是参数化类型,使用广泛的类型。 泛型的作用: 安全:编译时检查类型安全。 方便:所有的强制转换都是自...

  • swift泛型协议在函数中做参数和返回值

    泛型协议在函数中作为参数和返回值类型使用泛型协议只能作为泛型的约束使用,不能直接作为函数参数或者返回值类型使用。就...

  • 2018-03-16

    泛型:泛型优点: 1,编译时可以保证类型安全。 2,不用做类型转换,获得一定的性能提升。 泛型约束: where ...

网友评论

      本文标题:10、类型转换、泛型、扩展、协议

      本文链接:https://www.haomeiwen.com/subject/dklstktx.html