// Swift5 判断值类型var anyObj:Any=1if anyObj isInt{
print("anyObj's type is Int")}elseif anyObj isString{
print("anyObj's type is String")}
2. Swift 判断引用类型
// Swift5 判断引用类型classBase{
var text ="base text"}classSub1:Base{
var subText1 ="sub1 text"}classSub2:Base{
var subText2 ="sub2 text"funcsubFunc(){
print("sub func invoke")}}
3. Swift 类型转换
// Swift5 类型转换 as , as! , as?var obj =Base()var subObj1 =Sub1()var subObj2 =Sub2()// Swift 数组中类型为 Base 的都可以存入var arrayObj:[Base]=[obj, subObj1, subObj2]for index in0..<arrayObj.count{
let obj = arrayObj[index]if obj isSub1{
// 如果是 Sub1 就转换为 Sub1 类型,向下转型let subObj = obj as!Sub1print(subObj.subText1)}elseif obj isSub2{
let subObj = obj as!Sub2print(subObj.subText2)}else{
print(obj.text)}}
4. Swift AnyObject 与 Any
// Swift 使用 AnyObject 类型声明数组,其中可以存放任何引用类型,不可以存放值类型var arrayAnyObj:[AnyObject]=[obj, subObj1, subObj2]// Swift 使用 Any 类型声明数组,其中可以存放任何类型,包含 值类型 和 引用类型var arrayAny:[Any]=[1,"2",true, obj,(0,0),{
(param:Int)->Intinreturn param}]
5. Swift 泛型与扩展
// Swift 使用泛型定义方法,打印自身func printSelf<T>(_ param: T){
print(param)}printSelf("text")printSelf(1000)// Swift 使用泛型定义结构体,实现简单集合structList<T>{
privatevar datas:[T]=[]mutatingfuncadd(_ newEle: T){
datas.append(newEle)}mutatingfuncget(_ index:Int)-> T {
return datas[index]}}// Swift 使用扩展,给结构体添加一个扩展方法extensionList{
funcgetDatas()->[T]{
return datas
}}// 定义整型的集合var list =List<Int>()// 添加元素
list.add(1)
list.add(2)
list.add(3)// 读取元素var ele = list.get(1)print(ele)// 2// 调用扩展方法var datas = list.getDatas()print(datas)// [1, 2, 3]