Swift

学习Swift,我为啥子学习Swift,因为我有苹果电脑啊,哇哈哈哈哈;

开玩笑的,不过有苹果电脑对学习iOS开发真的挺重要的。可能苹果生态里面这两个也是父类跟子类的关系吧。

Swift学习一开始接触的是语法,然后是基本的开发控件,我先讲这两个,剩下的,路很长,共勉。(哈哈哈,这是朱老大经常跟我讲的,以后再说吧)

语法的内容我就不多说了,其实很多,但是也没那么多。接下来我就放一个基本的语法的链接,这些是我从一个软件上整理下来的,挺实用。

链接:https://pan.baidu.com/s/1RbrVzb7JhbaM-rSasY8a2w 密码:o4vt

(pages的哦,这个只是参考的学习资料)

接下来上代码:

//

//  ViewController.swift

//  002-第一个应用程序

//

//  Created by 曹杰 on 2018/5/16.

//  Copyright © 2018年 曹杰. All rights reserved.

//

import UIKit

/*

 1:OC [[UIView alloc] initWithFrame:xxx]

 Swift UIView(XXX:)


 类名() == alloc/init  等价

 2.类方法  OC  [UIColor redColor]

          Swift UIColor.red


 3:访问当前对象的属性,可以不使用‘self’

 建议:都不用,在编译器提示的时候再添加,会对‘语境’有更好的体会

 原因:闭包(提前准备好的代码,在需要的时候执行):(类似于 OC block),需要使用 self.


 4:没有分号;

 “;”目的分割语句的,在Swift中,默认不需要


 5:枚举类型、

 OC UIButtonTypeContactAdd

 Swift  '.'contactAdd


 6:监听方法

OC @selector

 Swift  #selector 如果带参数,不需要使用“:”

 2.0


 7:调试

 OC    NSLog

 Swift print

 -没有时间

 -效率比NSLog要高

 跟踪函数的时候

 OC __FUNCTION__

 Swift #function



 */

classViewController:UIViewController{

    ///从Xcode 8.0 开始,目前所有的插件都无法工作!

    ///option + cmd + /增加文档注释

    overridefuncviewDidLoad() {

        super.viewDidLoad()



        //预编译指令

        //MARK:- 视图生命周期

        //MARK:- 视图加载完成

        //1.创建试图

        let  v =UIView(frame:CGRect( x:0,y:20,width:100,height:100))


        //设置背景颜色

        //color+ 回车

        v.backgroundColor=  colorLiteral(red: 1, green: 0.0581554151, blue: 0, alpha: 1)              //TODO: 设置新的颜色



        letiv =UIImageView(image:  imageLiteral(resourceName: "1吉他大道"))      //FIXME: 应该更改头像

        iv.center = view.center


        view.addSubview(iv)


        //添加到当前视图

        view.addSubview(v)

        //2.创建一个按钮

        letbtn =UIButton(type: .contactAdd)


        v.addSubview(btn)


        btn.addTarget(self, action:#selector(clickMe), for: .touchUpInside)


        //MARK: 变量

        demo()

        demo1()


        //关于var和let的选择

        //不可变的会更安全,开发的时候,通常会先使用let,在需要变化的时候,再改成var



        /// Variable 'x' was never mutated; consider changing to 'let' constant

        //变量X从来没有被修改,建议改成‘let’

        varx=120

        lety =10


        print(x + y)

        v.backgroundColor = UIColor.red


        demo3()

        demo5201()

        demo5203(x:nil, y:nil)

        DEMO5204()

    }


    //007

    //最常见的一个错误

    //Unexpectedly found nil while unwrapping an Optional value

    //在解包时发现nil值

    /**

     定义 可选项使用?

     解包使用  ! ,准备计算

 */

    funcdemo3() {

        //1:原始的可选项定义

        //none:没有值,或者some 某一类型

        letx:Optional  =10



        //2:简单的定义

        //'?'用来定义Y是一个可选的int类型,可能没有值,也可能有一个整数

        lety:Int? =40// nil //= 20


        //输出结果Optional(10),提示这是个可选值

        print(x)


        //Constant 'y' used before being initialized

        //常量y在使用之前必须初始化

        print(y)


        //不同类型直接的值不能直接运算!如果没有值是nil不是任何数据类型,不能参与计算

        //2>‘!’ 强行解包 - 可从可选中强行获取对应的非控值

        //程序员必须为每一个惊叹号负责

        //程序中少用!

        print(x!+y!)


        //常量Y在使用之前必须初始化


    }


    funcdemo4()  {

        //1>定义y,没有初始化

        //2》给常量设置树脂,初始化的工作能做一次,再次修改常量会报错

        lety:Int?


        y =10


        //*** var  的可选项默认为nil

        //*** let 的可选值没有默认值


        varx:Int?


        x =10


        x =100


        print(x)





    }


    funcdemo2()  {

        //如果需要指定变量/常量的类型,也可以直接使用let x:类型 = 值

        //提示:在Swift开发中,极少使用直接指定类型,通常都是自动推导!


        letx:Double=10

        lety =100.5

        print(x+y)



    }

    //MARK: Demo1

    //定义变量var

    //常量 let ,定义之后,不能修改

    //2.自动推导,变量/常量的类型会根据右侧的代码执行结果,推导对应的类型

    //热键:option + click

    //3.在Swift中对类型要求异常严格

    //***任何不同的类型的数据之间都不允许直接运算

    //不会做默认的隐式转换,所有的类型确定都要由程序员负责!

    //在Swift中,不存在基本数据类型,都是结构体!

    funcdemo1()  {

        letx =10

        lety =10.5

        //将Y转化成整数

        //OC 中的写法(int)y ==>类型强转

        //Swift 中Int()'结构体'的构造函数

        print(x+Int(y))


        print(Double(x) + y)



    }

    funcdemo() {

        //定义变量var

        //常量 let ,定义之后,不能修改

        //2.自动推导,变量/常量的类型会根据右侧的代码执行结果,推导对应的类型

        //热键:option + click

        //整数:Int

        varx=10

        //小数:Double 精度高(OC 中 CGFloat)

        lety =10.5


        print(x , y)


    }

    //MARK: 5.20 简单的分支和三目的写法

    funcdemo520() {

        letx =10


        /**

         1:条件不需要()

         2:语句必须有{}

         -很多公司的代码规范中,禁止不使用{}

 */

        ifx>5{

            print("大了")

        }else{

            //will never be executed

            //永远不会被执行 - 编译器变异的时候,会做语法检查

            print("xiaole")

        }

    }


    funcdemo5201()  {

        letx =10


        x>5?print("大了") :print("小了")


        //分享,有印象就行

        //只执行前面的

        x>5?print("大了") : ()



    }


    //MARK: - ??

    /**??是一个简单的三目

     - 如果没有值,使用值

     - 如果没有值,就是用 ??  后面的值代替

    */

    funcdemo5203(x:Int?,y:Int?)  {

        print((x ??0)+(y ??0))


        letname:String? ="老王"


        print((name ??"") +"你好")


//        print("\(name)你好")

        //??操作符的优先级低,在使用的时候,记得加上小括号

        print(name ??""+"nihao")


    }

    //MARK: if let \ var

    funcDEMO5204()  {


        letoName:String? ="老王"

        letoAge:Int?  =10


        ifoName !=nil&& oAge !=nil{

            print(oName! +String(oAge!) )

        }



    }


    funcdemo5202(x:Int?,y:Int?)  {

//        let x: Int? = 10

//        let y: Int? = 200


        ifx !=nil&& y !=nil{

            print(x! + y!)

        }else{

            print("x huozhe y wei nil")

        }

        //强行解包有风险

    }


    @objcfuncclickMe(btn:UIButton) -> () {

        print(#function)//#function跟踪函数

        print("哈哈哈哈")

    }

    overridefuncdidReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

}


这次先突出几个学习的知识点:

1://MARK: 

很好用的一个标记符,因为开发的内容他不会是一个整体,所以你可以通过他来区分开不同的模块,并且在如图的部位看到并选择相应的模块位置。


2:对比一下OC和Swift的一些常用代码的区别:

1:OC [[UIView alloc] initWithFrame:xxx]

 Swift UIView(XXX:)


 类名() == alloc/init  等价

 2.类方法  OC  [UIColor redColor]

          Swift UIColor.red


 3:访问当前对象的属性,可以不使用‘self’

 建议:都不用,在编译器提示的时候再添加,会对‘语境’有更好的体会

 原因:闭包(提前准备好的代码,在需要的时候执行):(类似于 OC block),需要使用 self.


 4:没有分号;

 “;”目的分割语句的,在Swift中,默认不需要


 5:枚举类型、

 OC UIButtonTypeContactAdd

 Swift  '.'contactAdd


 6:监听方法

OC @selector

 Swift  #selector 如果带参数,不需要使用“:”

 2.0


 7:调试

 OC    NSLog

 Swift print

 -没有时间

 -效率比NSLog要高

 跟踪函数的时候

 OC __FUNCTION__

 Swift #function


这些我在代码的开头也写了,Swift相对于很多语言来讲,是一个亲密度很高的语言,我们可以在Swift上找到很多像Objective-C,Java,C++之类语言的影子;当然,通过对比联想学习,你会学的更快;


3:??    一个简单的三目

     - 如果没有值,使用值

     - 如果没有值,就是用 ??  后面的值代替


    funcdemo5203(x:Int?,y:Int?)  {

        print((x ??0)+(y ??0))

        letname:String? ="老王"

        print((name ??"") +"你好")

//        print("\(name)你好")

        //??操作符的优先级低,在使用的时候,记得加上小括号

        print(name ??""+"nihao")

    }

OK,今天就讲这些知识点,其实的话,一开始学习一门语言,对于代码一定要多码,当然,更重要的是有效代码,我们程序员不就是为了提高世界的运行效率而码代码的嘛

关于新的语言学习的话,代码自己码的代码要常回头看看,嗯~,我码的代码真好看(其实吧,你码的代码,嗯,我就不打击你了,哈哈哈),开个玩笑;

像我这么自恋的人,一般会把代码打印出来,细细品味,谁让我有打印机呢~

一张一张积累,也是让你对自己走过的路,学过的东西有一个数,不然的话,满电脑屏幕的代码,你会晕的哦。更何况,对于初学者来讲的话,其实你一天我感觉不会太多,谁让你是初学者呢

今天就先到这边了。

你可能感兴趣的:(Swift)