美文网首页
Swift语法重温(一)

Swift语法重温(一)

作者: BigBossZhu | 来源:发表于2019-08-23 17:41 被阅读0次

swift语法重温

适应语法.
UIKit框架,
去除NS前缀,
Class转化为struct.
没有isa指针.
取消预编译指令.

  1. playground:代码画板,可以立马看到代码效果.看书和官方学习语法.
    创建一个示例代码

    1. @UIApplicationMain作为函数入口
    2. 只有.swift文件没有.h.m文件
    3. 所有的代码都包装在{}默认都有一个缩进.
  2. 创建一个简单程序

    1. UIView(frameCGRect())
    2. UIColor.red.类方法.的形式,取消[]了.
    3. 访问当前属性不用使用self.(建议都不用改过来闭包才用)
    4. 没有;目的是分割语句的.在swift中默认不需要.
    5. 枚举类型UIButtonContactAdd,swift中.contactAdd.
    6. @selector改成#selector.
    7. 实例方法加上@objc func () {

    }

    1. nslog改为print.因为没ns前缀
    2. 热键cmd+opt+/, 热键color
    3. //MARK:- ,//MARK: //TODO //FIXME备注
    4. 添加代码块方法
    5. 快捷键control+5,快速查找同级对应文件,control+6快速查找文件中方法.
  3. 基础语法
    变量和常量
    1. 调用函数怎么写?
    2. let,var作用
    3. 自动推导,变量/常量的类型会根据右侧的推导结果,推导对应的类型.非常重要的热键,opt + click(鼠标)
    4. 在swift对类型要求严格,不会做默认的隐式转换.(例子:let x,let y不能直接相加),所有的类型确定都要由程序员负责.需要怎么处理才能相加呢?
    5. 不存在基本数据类型,都是结构体.
    6. 如果需要指定变量/常量类型,可以使用let x : double = 值来给x指定类型.很少使用.
    7. 关于var和let的选择?
    不可变的更安全,开发的时候,通常先使用let,在需要变化的时候再改成var.

  4. 可选项
    Optional:
    原始定义:some某一类值或none没有值
    Int?:
    类似Optional代表可能没有值可能有一个Int类型的值
    '!':
    强制解包'!'写在需要解包变量后,从可选值中去强行获取一个值.如果是nil就会崩溃.(程序员必须为'!'负责)
    技巧:'?'在定义用,'!'在解包用.尽量少用'!'.
    var的可选值默认值为nil,let可选值没有默认值.
    '?'
    非强制解包:解包出来的值可能为nil也可能为其值,所以进行计算一定不能使用nil不能计算,但是发送消息可以.有值就发消息没值就不发消息了

  5. 控制流(逻辑分支)

    1. if语句:if语句()去掉{}必须
            //MARK:-if语句()去掉{}必须
        let i = 10
        if i > 5 {
            print("大于")
        } else {
            print("小于")
        }
    
    1. 三目运算符:常见.'??'是一个简单的三目运算符
      代表可选类型如果有值,获取其值如果没有值取??后面的值,但是优先级较低,所以需要()将??内的解包包起来运算,提高优先级让其正常.
      且??前后都需要空格,参与运算+前后不能有空格.
        func demo (x:Int? ,y:Int?) {
        print((x ?? 0) + (y ?? 0))
    }
    
    1. if let/var:不是if语句是连用语法.进行判断解包
      if let 连用:判断对象传递值是否为nil.let后申明的变量作用域仅在{}中.
      if var 连用:{}中的值修改时使用.
        let oX :Int? = 10
        let oName :String? = "哈哈"
        if let x = oX, var name = oName {
            name = "嘿嘿"
            print(String(x) + name)
        }
    
    1. guard let:英文守卫的意思,和if let/var刚好相反,但是也用于解包
      守护一定有值,如果没有直接返回,代码执行到else{}结束后一定有值.用guard降低分支的层次,用的很多.
    //MARK:-guard
        let oName:String? = "你好"
        guard let name = oName else {
            return
        }
        print(name)
    
    1. switch:
      1. swift中可以对任意类型的值分支,不再局限整型
      2. switch在swift中一般不需要break,如果有分支什么都不干,才使用break
      3. switch如果是多值使用','处理
    //MARK:-<##>switch
        let num = "10"
        switch num {
        case "10","9":
            print("优秀")
        default:
            print("一般")
        }
    
  6. for循环

    //MARK:-for循环
    func demo1() {
        //升序遍历
        for i in 0...5 {
            print(i)
        }
        //倒序遍历
        for i in (0...7).reversed() {
            print(i)
        }
    }
    
  7. 字符串

    1. 字符串遍历
    2. 字符串长度传
      1. 字符个数count(推荐使用)
      2. NSString中转,as关键字类型转化
    3. 字符串拼接:()斜线拼接,拼接字符串注意可选项,append好像无效
    4. 格式化:以前是StringWith...现在以前的with换成()
    5. 字符串的子串:直接用封装好的文件.
    1. 打印出我爱你中国遍历
    2. 打印出长度
    3. 老王 18 岁 岁是可选值:还要看下
    4. 打印敲代码的当前时间
    5. 我爱你中国取子串中国.
    
  1. 集合
    1. 数组:OC使用@[],swift也是用[]但是没有@.swift基本数据类型不用包装,基本数据类型对应的也是结构体.
      混合数组:开发中几乎不用.如果数组中类型不一致,自动推导的结果是NSObject,swift中可变数组var,不可变let
      swift中有一个类型[AnyObject]->任意对象,swift中的一个类可以没有任何父类.
      1. 定义
        可变:var arr可变数组,let arr不可变数组
      2. 遍历
        1. 按下标遍历
        2. forin遍历
        3. 遍历下边和内容1:enumerated():遍历出来的元组数据结构.
        4. 遍历下边和内容2:(n,s).
        5. 反序遍历reversed().
        6. 反序加内容.
      3. 增删改.
        增:append
        删:remove等,删除所有等
        改:下标直接修改
      4. 合并
        arr1 += arr2 注意:不同类型的数组不能合并,需要进行转化为相同类型
    
    
    1. 字典

      1. 定义:
        可变:var dict可变字典,let dict不可变字典
      2. 遍历
        1. 遍历字典获取key和value,
        let dict = ["name":"校长","age":"5","action":"run"]
        

      for (key,value) in dict {
      print(key,value)
      }

       ```
       2. 遍历获取元组结构,以及元组内的值
       for e in dict {
       print(e)
       print("元组内容 \(e.key) \(e.value)")
      

      }

      1. 增删改查

      2. 合并

```
            改:dictV.updateValue("李四", forKey: "name")
    删:dictV.removeValue(forKey:"head")
    查:dict["name"]!(经过体统包装的都会变成可选值)
    增:dictV.updateValue("李四", forKey: "name")
```

相关文章

网友评论

      本文标题:Swift语法重温(一)

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