swift基础学习笔记

链接"[(https://www.cnblogs.com/jiang-xiao-yan/)
]这里面有很多ios的只是 OC的 swift的知识点
1、在学基本语法之前,简单看一下与OC的不同

注释:OC #pragma marks 视图加载完成

Swift //MARK: 视图加载完成

//TOOO:设置背景颜色(Xcode 8.0 特有)

          //FIXME:更改头像

创建一个视图View:

OC [[UIView alloc]initWithxxx:];

            Swift    UIView(xxx:)

                       类名() == alloc/init 等价

类方法:

OC [UIColor redColor];

Swift UIColor.red

2.0  UIColor.redColor

访问当前对象的属性,Swift可以不使用self.:

OC [self.view addSubview:v];

Swift  view.addSubview(v)

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

     原因:闭包(类似OC block),需要使用self.

没有";"

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

枚举类型:

OC UIButtonTypeContactAdd

         Swift      ‘.’contactAdd

监听方法

OC @selector

        Swift      #selector 如果带参数不使用‘:’

2.0 直接使用"",如果带参数使用‘:’

调试

        Swift        print

                       没有时间

                       效率比NSLog更高

跟踪函数

       OC     __FUNCTION__

       Swift    #function

        //2.0语言print(__FUNCTION__)

       //3.0语言   print(#function)

2、常量与变量

       1》 关于常量let和变量var的选择:

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

2》如果一个变量从未被改变,会提出警告

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

      //变量x从来没有被修改,建议使用let

3》修改视图属性,依然使用常量

      let v = UIView()

      //仅仅修改v的属性,并没有修改v的指针地址

      v.backgroundColor = UIColor.redColor()

4》如果需要指定变量和常量的类型,可以使用 let x:类型 = 值

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

5》定义变量var,定义后可以修改;常量let,定义之后不可修改

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

热键:option + click 查看类型

整数:Int 与OC中的NSInteger类似

小数:Double 与OC中的CGFloat类似

6》在Swift中对类型要求异常严格

任何不同类型的数据之间,不允许直接运算,不会做默认隐式转化,所有的数据类型确定都要由程序员负责

7》Swift不在基本数据类型,都是结构体

3、可选项Optional

(1)原始的可选项定义(None 没有值 或者 Some某一类值)

let x:Optional = 10

(2)简单的定义

'?'用来定义 y是一个可选项的整数类型

let y:Int? = 20

如果不进行初始化会直接报错:

Constant ‘y’ captured by a closure before being initialized

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

不同类型之间的值不可以直接运算,如果没有值则默认nil,不是任何数据类型,不参与计算,print(x+y)提示错误;

解决:’!'强行解包,在可选值中选择非空值,如果值初始化为nil,会崩溃

定义y,没有初始化

        let y:Int?

      给常量设置数值,初始化的工作能做一次

        y = 20

      //两次修改常量会报错

        //y = 3

        var 的可选项默认为nil

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

            var x:Int?

           //输出nil

           x = 10

          x = 100

      //输出可选项100

          print(x)

4、逻辑分支

1>简单的分支

a.条件不需要()

b.语句必须有{}

if x < 6 {

}else {

}

2>三目(三目语法跟OC一样)

x > 5 ? print() : print()

有时候使用’()'表示空执行

x > 5 ? print() : ()

3>switch

/*

1.switch 可以针对任意类型的值进行分支,不在局限整数

    2.switch 一般不需要break

3.switch 如果多时,使用’,’

    4.所有的分支至少需要一条指令,如果什么都不干,才使用break

*/

func demo(num: String){

        //let num = 10

        switch num {

case “10”,“9”:

            print("优")

        case "8":

            break

        default:

            print("一般")

        }

特殊的使用,不经常出现

let point = CGPoint(x: 10, y: 10)

        switch point {

        case let p where p.x == 0 && p.y == 0:

            print("原点")

        default:

            print("")

        }

5、可选的判断

1、if let 和 guard let 的技巧:

使用同名的变量接收者,在后续使用的都是非空值,不需要解包;

好处:可以避免命名的烦恼

guard 守卫/守护

guard let 和 if let 刚好相反

if let name = name,age = age {

        //非空的name和age仅在{}有效

        print(name + String(age))

        print("------------")

    }else{

        print("姓名或者年龄为 nil")

    }

//guard let 守护一定有值,如果没有直接返回

  guard let name = name,age = age else{

        print("姓名或者年龄为 nil")

        return

    }

//代码执行至此,name和age一定有值

    //通常判断是否有值之后,会做具体的逻辑实现,通常代码多

    //如果用if let 凭空多了一层分支,guard是降低分支层次的办法

    //guard 是Swift 2.0之后推出的

     print(name + String(age))

2、if let/var 连用语法,目的就是判断值

//不是单纯的if

if oName != nil && oAge != nil {

        print(oName! + String(oAge!))



    }



    //if let 连用,判断对象的值是否为nil,{}内一定有值,可以直接使用,不需要解包



    //if var 连用,{}内可以对值进行修改



    if var name = oName,let age = oAge {



          name = "老李"



        //进入分支之后,name 和 age 一定有值,不需要解包



        //name age 作用域仅在{}中



        print(name + String(age))



    }else{



        print("name 或者 age 为nil")



    }

3、??

??是一个简单的三目

    如果有值,使用值

    没有值,使用 ?? 后边的值代替

//?? 操作符的优先级低 ,在使用的时候最好加上()

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

你可能感兴趣的:(swift基础学习笔记)