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基础学习笔记的更多相关文章

  1. Swift基础学习笔记 一

    之前学习过一段时间swift,由于目前开发的项目还是用的OC,一段时间不看swift又基本忘干净了,好记性不如烂笔头,还是用博客记录一下自己学的东西吧. 基本数据类型: 1.常量(let)和变量(va ...

  2. 【C#编程基础学习笔记】4---Convert类型转换

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...

  3. 【C#编程基础学习笔记】6---变量的命名

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...

  4. 1.C#基础学习笔记3---C#字符串(转义符和内存存储无关)

    技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com ------------------------------------- ...

  5. Swift基础学习

    Swift基础学习  http://c.biancheng.net/cpp/html/2242.html 这个网站最近看了一下,对于基本语法解释概括的相对全面,如同重新练习一遍OC似的,挺全面的,谢谢 ...

  6. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  7. Mysql数据库基础学习笔记

    Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...

  8. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  9. Java基础学习笔记(一)

    Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ...

随机推荐

  1. atoi函数实现

    #include int my_atoi(const char *str) { int result; char sign; for (; str && isspace(*str); ...

  2. Windchill 查询功能

    一.使用SearchCondition 查询语句中用容器中的containerReference.key.id名称来代替数据库中的字段idA3containerReference /**      * ...

  3. 24、嵌合体序列Chimeras

    转载:http://www.cnblogs.com/xudongliang/p/6497465.html 嵌合体序列:由来自两条或者多条模板链的序列组成,示意图如下: 在PCR反应中,在延伸阶段,由于 ...

  4. Java 概述及安装使用

    Java是什么 概述 java是一种面向对象编程语言,不过经过多年的发展,现在已经演变为了一套强大的技术体系.Java设计者们将Java划分为3种结构独立但却彼此依赖的技术体系分支,它们分别对应着不同 ...

  5. 从阿里中台战略看企业IT架构转型之道

    此文是我阅读<企业IT架构转型之道>一书的学习笔记,所有内容出自钟华老师的这本书. 零.为何读<企业IT架构转型之道> 在加入X公司后,开始了微服务架构的实践,也开始了共享平台 ...

  6. JavaScript -- 数据存储

    Cookie Web应用程序是使用HTTP协议传输数据的.HTTP协议是无状态的协议. 一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接.这就意味着服务器无法从连接上跟踪 ...

  7. webpack@3.6.0(2) -- css及图片相关问题

    本篇内容 css3前缀处理postcss 消除未使用的css部分 图片处理 css分离和分离后的图片处理 css3前缀处理postcss cnpm i -D postcss-loader autopr ...

  8. css 实现三栏布局的四种方式

    三栏布局就是左中右,左右两边固定,中间自适应. 1. 绝对定位 <div class="left">左边</div> <div class=" ...

  9. MySQL主从配置实战笔记

    其实网上已经有关于MySQL主从复制的很丰富全面的资料了,这里写点东西主要是为了给自己加深印象. 复制原理 MySQL主从复制是内建的非常强大的功能,主要应用于数据备份,负载均衡等方面.因为配置相对比 ...

  10. iOS拼图

       #import "ViewController.h" @interface ViewController () @end @implementation ViewContro ...