【Swift3基础】基础语法

作者: 亲爱的大倩倩 | 来源:发表于2017-04-25 10:46 被阅读96次
    /*基本说明
     创建游乐场,可以立即看到效果
     
     创建对象:
     OC:alloc init
     Swift: XXX()
     
     调用方法
     OC: [UIColor redColor];
     Swift: UIColor.red
     
     枚举:
     OC: UIButtonTypeContactAdd
     Swift:UIButtonType.contactAdd 其中UIButtonType可以省略
     
     创建结构体
     OC: CGPointMake()
     Swift: CGPoint()
     */
    
    let view = UIView(frame: CGRect(x:100 ,y:100 , width: 50, height:100))
    view.backgroundColor = UIColor.red
    
    let btn = UIButton(type: .contactAdd)
    btn.center = CGPoint(x: 25, y: 50)
    view.addSubview(btn)
    
    /*常亮和变量
     let: 定义常量,不可修改
     var: 定义变量,可修改
     注意: swift中定义常量和变量不需要写数据类型,编译器会根据后面的真实类型自动推导,10是int型,10,1是double类型
          每行语句末尾可以不写分号结尾(写了也没关系),若不写会自动将换行作为语句结尾,如果一行有多条语句,那么每条语句结尾必须写上分号
     */
    
    /*数据类型转换
     OC: 数据类型写在变量前面
     Swift: 数据类型写在变量后面,并且用冒号隔开
     强制转换: 数据类型()
     Swift中不存在隐式类型转换,所有类型转换都是显示的,如下面let sum = num1 + num2会报错,但OC会自动将num1变成10.0再相加
     */
    
    /*
     分支_if
     Swift中if使用基本和OC一致
     1.Swift中if可以省略后面的()
     2.Swift中哪怕if后面只有一条语句,也不能省略{}
     3. 在C和OC中,if括号内非0即真
        在Swift中,if括号内只能放bool值,取值只有两个 true/false,若是if a 则错误
     
     分支_if else
     1.Swift中if else和OC一样使用
     2.但Swift中if else可以使用三目运算符简写
     
     分支_switch
     1.switch后面的()可以省略,case后面的break可以省略
     2.OC中如果没有break会穿透,但Swift不会穿透
     3.OC中如果要在case中定义变量要加{}作用域,Swift不用
     4.OC的default位置可以随便放,只要所有case都不满足就会执行default,但Swift中default只能放在最后
     5.OC中的default可以省略,但Swift中大部分不能省略
     
     分支_for循环
     以下...之间不可有空格
     0..<10 代表一个区间范围,含头不含尾,从0到9,按下面的例子,会将0-9之间的值,依次赋值给i,然后在执行循环中的打印语句,若不需要i,可以使用_
     _ 代表忽略,如果不关心某个参数,就可以使用_
     0...10 代表一个区间范围,含头含尾,从1-10
     
     分支_while循环
     Swift中while循环和OC中使用一样
     
     分支_do while循环
     do while没有do,因为do被用于捕获异常了
     */
    
    /*可选类型:如下列,url创建的可能有值也可能是nil(url含中文),所以就返回可选类型
     Optional   代表可以有也可以没有
     convenience init?  若看到方法或数据类型后面有? 代表返回的是一个可选类型
     注意:    若打印可选类型,结果会被Optional包裹,如果不想被包裹,则需要加一个!
     !  代表告诉编译器,可选类型中一定有值,强制解析
        如果可选类型中没有值,而又强制解析,则会崩溃
     可选绑定,会将url中的值取出来赋值给urlFinal变量,如果值不为nil,才会进入{},按住Option看到urlFinal是不带?的,而上面的url是带?的
     */
    
    /*字符串String是个结构体,而OC中是NSString是个对象,继承与NSObject
     定义:    OC用@"",Swift用""
     拼接:    直接+=
     格式化拼接: \()或者format,arguments,其中format,arguments需要将所有的值放入数组中
     和OC转化: : NSString或as NSString
       截取:    使用OC的字符串截取,先将Swift字符串转化成OC字符串再截取
     遍历:      for循环直接遍历
     */
    
    /*备注
     
     SWift特点:
     快速,现代,安全,互动,明显优于OC
     可用框架Cocoa 和Cocoa Touch
     取消了OC的指针和其他不安全性的访问,OC是动态运行时,你写的即时不对,编译也不报错,但Swift会在编译的时候报错
     舍弃了OC的smalltalk语法,改为句点表达法
     提供了类似Java的名字空间,泛型,运算对象重载等高级语法
     Swift是没有C的OC
     
     
     
     开发技巧: 按住option,点num即可看到类型
     句末不用分号结尾,Swift会自动帮我们在句末添加分号,但如果一行有多句语句,要用分号隔开
     Swift是强语言,OC是弱语言,若是在OC中 int a = 10.1,OC会将a强制转化成10
     Swift中数据类型首字母大写
     没有C中的++和-- 变成了+=1
     OC是在运行时发现错误,?和!的使用,使得Swift是在编译过程中就发现大部分错误
     ? 可选类型,可以有值也可以没值
     ! 强制解析,之前要进行判断
     控制器中能不写self,就不写self,你写在哪个控制器内的view,就证明你调的是那里的view
     看见self证明你是在闭包中
     
     通过调用栈来分析调用步骤
     */
    
    
        
        /*
         OC的Block: 类似于匿名函数,用于保存一段代码,在需要的时候执行
         Swift的闭包:也是用来定义函数,也用于保存一段代码,在需要的时候执行
         作用:在耗时操作时使用
         定义: in用来去等形参返回值和执行代码
         {
            (形参列表) -> (返回值)
            in
            需要执行的代码
         }
         */
    
        func sum (number1:Int, number2:Int) -> Int
        {
            return number1 + number2;
        }
       
        func loadData(finished: ()->())
        {
            print("执行耗时操作")
            finished()
        }
    //在viewDidLoad中调用
            let sumTwoNubmer = sum(number1:2, number2: 3)
            print(sumTwoNubmer)
            
            loadData(finished:
                {print("被回调了")
                view.backgroundColor = UIColor.red
                })
       
    
        //要求:定义一个方法来创建UIScrollView,并且UIScrollView上有多少个按钮必须通过闭包来告诉该方法
        func creatScrollView(btnCount: () -> Int) -> UIScrollView
        {
            //1.创建scrollView
            let sc = UIScrollView(frame: CGRect(x: 100, y: 100, width: 200, height: 50))
            sc.backgroundColor = UIColor.red
            //创建N多Button
            let count = btnCount()
            for i in 0..<count
            {
            let btn = UIButton(frame: CGRect(x: i*80, y: 0, width: 80, height: 30))
            btn.setTitle("标题\(i)", for: UIControlState.normal)
            btn.backgroundColor = UIColor.blue
            sc.addSubview(btn)
            }
            sc.contentSize = CGSize(width: count*80, height: 0)
            return sc
        }
    //在viewDidLoad中调用
            //闭包创建button个数,当调用这个方法时候,调用下面的creatScrollView函数,当执行到let count = btnCount(),会返回来调用这个闭包,得到5,再将值赋值给count
            let sc = creatScrollView { () -> Int in
                return 5
            }
            view.addSubview(sc)
    
        //循环引用
        //定义属性保存block最容易出现循环引用,在闭包中使用了self就循环引用了
        //析构函数,相当于OC中的dealloc
        deinit
        {
            print("被销毁")
        }
    
        //懒加载:用到时再加载,节约性能,并且只加载一次
        //格式:定义变量时前面使用lazy来修饰变量,后面通过等号赋值一个闭包
        //注意1.必须用var修饰,注意2:闭包后面必须跟上()注意3:如果闭包是用于懒加载,那么in之前的代码都可以删除,包括in
        lazy var dataList: [String] =
        {
            () -> [String]
            in
            print("懒加载执行了")
            return["1","2","3"]
        }()
        
        lazy var dataList2: [String] =
        {
            print("哈哈哈哈哈哈")
            return["6","7","7"]
        }()
        
        
        //懒加载执行了这句话只会调用一次,但会按点击次数输出["1","2","3"]
        override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
        {
            print(dataList)
            print(dataList)
            print(dataList)
            
            print(dataList2)
            print(dataList2)
            print(dataList2)
        }
    

    相关文章

      网友评论

        本文标题:【Swift3基础】基础语法

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