美文网首页
Swift 4.0学习之旅—基础部分

Swift 4.0学习之旅—基础部分

作者: lixiangdev | 来源:发表于2018-04-27 17:41 被阅读0次
        /*
         let 作为不需要修改的值得关键字 声明的为常量
         若常量的值可变 则用 var
         */
        let x = 0
        let y = 9
        let z = 8
        let i = x + y + z
        print(i)
        
        var j = i
        j += 1
        print(j)
        
        var type : NSInteger
        var type1 : NSArray
        var type2 : NSMutableArray
        var type3 : NSString
        
        var more,less,bet : NSInteger
        
        var str = "hello world"
        type = 1
        type1 = [0,1,2,3,4]
        
        /*
         print 输出
         全部为常量时  可以直接做加减乘数操作
         若为有常量和变量时  变量为字符串  可通过"\()" 在括号内将常量的计算结果值 放入变为字符串类型
         若有回车 换行 占位  要加上 \n 转义
         常量也可在全部的字符串中 加 \() 在括号内放入常量
         */
        
        print(x + y + z + j + i + type)
        print(str + "\n" + "\(x + y + z + j + i + type)")
        
        print(type1)
        
        //注释与oc一样
        
        // 分号 与oc 一样  可打可不打  若一行内 两句语句 需打上 分号;
        
        
        //整数  有符号 负 正 零  无符号 零 正 数
        
        let minvalue = UInt8.min //值为0 是UInt类型
        let macvalue = UInt8.max //值为255 是UInt类型
        
//        print(x + minvalue + macvalue) “+”不可用:请使用显式的类型转换或Strideable混合型算法的方法  Strideable待研究
        
        let flo : Float = 1.00
        
//        print( x + flo) 报错 类型不同
        //先
//        let  res  = x + flo 依旧报错 类型不同
        let res = 3 + 1.00 //此时不会报错,系统会推断为double类型
        let res1 : Double = 3 + 1.00 //不会报错,系统会推断为double类型

        print(res)
        print(res1)

        let decimalinteger = 17
        let binaryinteger = 0b1001 //二进制
        let octalinteger = 0o21     //八进制
        let hexadecimalinteger = 0x11   //十六进制
        
        let e = 1.25e2 //指数 乘 10^2
        let _e = 1.25e-2 //指数 乘 10^-2
        
        let _0xe = 0x11p2 //十六进制用指数 为大小写 P p p后面跟数字表示乘2的几次方
        let _0x1 = 0xA.1p2 //十六进制小数指数
        let _0x2 = 0x1.1p2
        print(decimalinteger,binaryinteger,octalinteger,hexadecimalinteger,e,_e)
        
        print(_0xe,0xAp2,_0x1,_0x2,0x0.1p1,0001.1)
        
        //进制小数转十进制
        //例如 0b1.1 二进制小数 转十进制
        //小数点前 1*2^0+ 小数点后 1/2^1 = 1.5
        // 0b11.11 = 1*2^1 + 1*2^0 +  小数点后 1/2^1 + 1/2^2 = 3.75
        
        //十进制小数转二进制
        //将整数部分 /2 余(1 或 0) 商部分再/2 直到商为0为止
        // 22/2 = 11 余 0   11/2 = 5 余 1   5/2  2 余 1   2/2 1 余 0  1/2 0 余 1
        //然后从最后的余数 往前 从左到右排列就是 10110  这是二进制小数点前算法
        // 1.1 =  1/2 0 余1 小数点前     0.1*2 = 0.2 取小数点前 0 再取小数点后0.2 * 2 = 0.4 取0
        //结果为 1.0001 无穷
        //1.5(d) 转b
        // 1/2 0余1 取 1   0.5*2 = 1.0 取整 1  结果为 1.1(b)
        
        //后续八进制同理
        //八进制小数转十进制
        //0o1.1 = 1*8^0 + 1/8^1 = 1.125
        
        
        
        //十六转 十进制
        //0x1.1p0 = 1*16^0 + 小数点前  1/16*2^0 = 0.0625 = 1.0625
        //0x1.11p0  此时 小数点后面多少位 就/16的多少次方 从1开始
        //0x11.11p0 = 1*16^1 + 1*16^0 + 1/16^1*2^0 + 1/16^2*2^0 = 17.066406
        
        //十进制转十六进制同上
        
        
        print(000123,1___0000_0,1__0_0_.1_0_1)
        
        print(String(format: "%f",0x11.11p0))

      //类型别名 通过关键字 typealies 将系统关键字转换为自己想用的关键字
        //说实话 合作的话 也许会对自己有用
        typealias hahaInt = Int
        let value : hahaInt = 2
        
        
        //布尔值相对于oc来说 YES 与NO  比 True 与 false 好理解 与java相同
        
        if true{
            print("真")
        }else{
            print("假")
        }
        
//        if 后可以不将判断条件放在括号里
        
//        if 1 报错 与oc 不同 1在oc里为真  0 为假   这里不行
        //应该 if 1 == 1
        
        
        
        //元组
        let test1 = (123,"123") //为int与string组成的元组
        print(test1)
        print(test1.0,test1.1) //使用.0 .1 来获取元组的第几个下标对应的值
        
        let (value1 , value2 ) = test1 //定义一个元组等于初始元组
        print(value1,value2)
        
        //用 下划线 _ 来忽略元祖某一部分
        let (value3,_) = test1 //定义一个元组 等于初始,但只取其第一个部分
        print(value3)
        
        let test2 = (123,"123",1.01)
        let (value4,_ ,value5) = test2
        print(value4,value5)
        
        let test3 = (123,"123",1.01,111)
        //let (value6,_ ,value7) = test3 本以为会自动省略其中,但是会报错 这样是不行的
        let (value6,_ ,_,value7) = test3 //还是不是那么聪明的语法 哈哈哈哈
        print(value6,value7)
        
        //把别的元组的参数名拿过来 给附上值 作为自己元组的参数名 组合成元组   (一开始还以为可以拿参数名当类型来用)
        let test4 = (value6 : 456 , value2 : "haha" , value6 : "error")
    
        print(test4,test4.0,test4.1,test4.2)
        
        //本以为参数名是对象(被oc 毒害不浅)  其实就是个名字
        print(value6)
        
//        value6 = 789 错误应为是let
        var test5 = (123,"123")
        var (value8,_) = test5
        value8 = 789
        print(value8)
 //可选值 optionals
        let possiblenumber = "123"
        let convertednumber = Int(possiblenumber) //此时convertednumber 的值有两种情况 可能是123(int) 可能是其他值
        let nownumber : Int? = Int(possiblenumber) //若正规的话 有没有必要这么写
        
        let poss = "hello world"
        let poss1 = Int(poss)
        let poss2 : Int? = Int(poss)
        let poss3 : Int! = hahaInt(poss)
        let poss4 : Int! = Int(poss)
        
        print(poss1,poss2,poss3,poss4) //结果为 nil nil none none
        
//        print(poss1 + poss2 + poss3 + poss4) 报错 因为poss1 poss2 是可选值 不能参与计算
       // print(poss3 + poss4)//这样是可以写出来不提示错误的 必须为int类型的值 但是值为none 计算错误 运行报错
        
        //nil 情况
//        poss2 = nil 虽然是可选值但是报错 因为是let类型 尽管poss2的输出值为 nil 但是不能直接赋值nil 需要Var
        var code = 404
//        code = nil 虽然是var 但是code 没有明确值类型 被推断为int 类型 所以不能直接赋值
        //nil 定义为 不能用于非可选的常量和变量  如果需要处理确实,需要声明为对应的可选类型
        var code1: Int? = 404
        code1 = nil;//是可以的
        
        var code2 : String? //此时code2 为nil  被自动设置为nil
        //在oc中nil 表示一个空对象指正
        //在swift 中 表示缺失值
        
        //if强制解析
        
        var code3 : String?
        
        if code3 != nil{
            print("haha")
        }else{
            print("lili")
        }
        
        //if while 语句
        if let code4 = code3{
            print("error")
        }
        
        code3 = "hello world"
        if let code5 = code3{
            print("hello" + code5)
        }
        
        var code8  = "123"
        let code9 = 123 //此时 code9 被推测为 int类型
        let code10 = Int(code9)// 此时 code10 是被 int(code9) 返回一个可选的int类型  其中 可选的int类型包括 一个就是int类型值 和 一个没有值 但不能是其他类型
        //此时的code10  要么是int类型 要么是没有值
        
        //所以下面的式子 code6 被接收到的应该是个可选类型 不是单独的一个明确类型
//        if var code6  = Int(code9){  //这么写报错 需要加上可选类型 var code6 : Int?
//            print("error  \(code6)")
//        }
        
        if var code6 : Int? = Int(code9){
            print("code6 = \(code6)")
//            print(code9 + code6?)//code6 后面加问号肯定是不行滴  要加感叹号!  如果code6 没有值 则会崩
            print(code9 + code6!)
        }
        
        let code11 = "hello"
        
        if let code12 = Int(code11){
//            print(code9 + code12!) //演示下崩的情况
        }
        
        
        
        //这么做不行 code13必须为
//        let code13 : String? = ""
//
//        if let code14 = String(code13){
//
//        }
        
//        Int(括号里 不能放一个可选值和一个 指定非可选值 只能放 推测固定类型)
        
        
        //if while 语句中 if后面创建的变量和常量 只能在if 语句中使用 外侧不能使用
        
        //错误处理 函数可以在声明中添加throws 关键词来抛出错误信息 如果函数能抛出错误消息,需在表达式中前置try 关键词
        func canthrowanerror() throws{
            
        }
        
        do{
            try canthrowanerror()
            //没有错误消息抛出
        } catch{
            //有一个错误就抛出
        }
输出为
17
18
53
hello world
53
(
    0,
    1,
    2,
    3,
    4
)
4.0
4.0
17 9 17 17 125.0 0.0125
68.0 40.0 40.25 4.25 0.125 1.1
123 100000 100.101
17.066406

真
(123, "123")
123 123
123 123
123
123 1.01
123 111
(value6: 456, value2: "haha", value6: "error") 456 haha error
123
789

相关文章

网友评论

      本文标题:Swift 4.0学习之旅—基础部分

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