美文网首页花落√莫相思Swift学习good
57- Swift 之 类型判断和转换

57- Swift 之 类型判断和转换

作者: NetWork小贱 | 来源:发表于2017-08-03 13:54 被阅读520次

    一 、类型的判断

    1、is 的介绍

    Swift 中类型的判断的关键词是 isis 操作用来判断某一个对象是否是某一个特定的类,它会返回一个bool类型的值。

    2、 is的使用方法

    1> is 的一般判断(Swift 系统也会自动判断)

    // 类型的一般判断方法
    
    let NetWStr = "NetWork小贱"
    /**
     判断NetWStr 是否是 “字符串”
     */
    if NetWStr is String {
         print("NetWStr->String 匹配成功")
    }else{
         print("NetWStr->String 匹配失败")
    }
    
    // 判断 Int 是否能匹配 String
    let NetWInt = 110
    if NetWInt is String {
        print("NetWInt->String匹配成功")
    }else{
        print("NetWInt->String 匹配失败")
    }
    
    

    2> 系统不能为我们判断类型的处理

    let Params:[Any] = ["NetWork小贱",120,["120",12],["As":"120"]]
    /**
     遍历数据获取其类型
     */
    for item in 0..<Params.count {
        let temp = Params[item]
        if temp is String {
             print("\(temp)"+"-- 字符串匹配成功")
        }
        if temp is Int {
             print("\(temp)" + "-- 整数匹配成功")
        }
        if temp is Array<Any> {
             print(temp)
             print("-- 数组匹配成功")
        }
        if temp is Dictionary<String, Any> {
            print(temp)
            print("-- 字典匹配成功")
        }
    }
    

    二、类型的转换

    1> 同类型的对象转化 as

    /**
     类型转换
     as : 同类型的 OC 类型和 Swift 类型的转化
     */
    let NetWorkData = Data.init()
    let NetWData = NetWorkData as NSData
    print(NetWData)
    
    
    let NetWorkStr = "Network小贱"
    let kNetWStr = NetWorkStr as String
    print(kNetWStr)
    
    

    2> 类型的强制转换(as !),否则抛出异常

    /**
     类型的强制转化
     
     as!操作符是类型转换的强制格式,优点在于代码简单,如果可以转换,则会返回转换了格式的对象,如果无法转换就会抛出运行时错误。因此除非百分之百确定可以转换,否则不应该使用as!来进行强制类型转换。
    
     */
    
    class NetWClass:NSObject {
        var name = "NetWClass强制转换成功"
    }
    
    /**
     类型的转换 Any --> NetWClass
     */
    let ParamClass:[Any] = [NetWClass.init()]
    
    for item in ParamClass {
        let temp = item as! NetWClass
        print(temp.name)
    }
    

    3> 非强制的类型转换(as?),如果转换不成功返回nil

    
    /**
     as! 类型转换,在类型转换失败的时候返回 Nil。否则返回转换后的类型
     */
    class NetWClassA:NSObject {
        var name = "NetWClassA强制转换成功"
    }
    
    class NetWClassB:NSObject {
        var name = "NetWClassB强制转换成功"
    }
    
    let ParamClassX:[Any] = [NetWClassA.init(),NetWClassB.init()]
    for item in ParamClassX {
        let temp = item as? NetWClassA
        if temp == nil {
            print(temp)
        }else{
            print((temp?.name)!)
        }
        
        let tempX = item as? NetWClassB
        if tempX==nil {
             print(tempX)
        }else{
            print((tempX?.name)!)
        }
    }
    

    相关文章

      网友评论

        本文标题:57- Swift 之 类型判断和转换

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