• Swift基本语法


    常量和变量

    • let 常量,只有一次赋值机会,不能够被修改
    • var 变量,可以被修改
    • swift会自动推导数据类型
      • 整数的默认类型是int
      • 小数的默认类型是Double
    • 不同类型之间不能够直接计算,OC可以,因为有隐式转换
      • 类型转换:调用构造函数转换类型
    • Swift要求运算符对称
    • let 和 var 的选择
      • 选择let更加的安全

    可选类型

    一个对象有两面性:有值或者为nil
    
    • 声明

      • 在类型的后面添加'?'声明可选类型 例:var a:Int?
      • 常量的可选类型是没有意义的,因为只有一次赋值机会
      • 必选类型,一定要有值,并且一定不能为nil
    • 可选类型计算

      • 可选类型不能够直接参与计算
    • '?'

      • 表示可选类型
      • 在打印的时候会自动带上Optional字样
    • '!'

      • 可选类型不能够直接计算,如果参与计算系统会自动提示添加'!'强制解包
      • 将'可选类型'的值,解包
      • 报错fatal(致命的) error: unexpectedly found nil while unwrapping() an Optional value
      • '!'存在风险,如果为nil,程序就会boom
      • 提示程序员在这个地方可能存在风险需要考虑是否需要判断为nil
    • '??'

      • 空合并运算符得到的结果是必选类型
      • 运算符的优先级比较低,在使用的时候需要使用()来提高优先级
      • 相当于三目运算符
      • 快速判断对象是够为nil,如果为nil,就去??后面设置的默认值
    • 带有红圈白点的错误提示,一般都是系统能够自动修改的错误

    if判断

    • 特点
      • 添加判断,不需要()可以添加
      • 执行分支必须有{}
      • Swift没有非零即真的概念,只有true和false
    • 三目运算
      • 和OC没有任何区别
    • guard(守护)
      • 作用和if!()类似,给判断条件取反
    • if let/var
      • 快速给一个对象赋值并且判断是否为nil
      • 如果对象不为nil,就进入分支执行
      • 在分支中可以直接使用必选类型的对象,更加方便,不需要每次都强制解包
    • guard let/var ...else
      • 快速给一个对象赋值并且判断是否为nil
      • 如果对象不为nil,就进入else分支执行
      • 在分支中可以直接使用必选类型的对象,更加方便,不需要每次都强制
    • switch..case
      • 判断任意类型的对象
      • 不需要写break,默认不穿透,如果需要穿透需要添加fallthrouth关键字
      • 定义临时变量不需要添加{}限制作用域
      • 一次性可以判断多个值

    可选类型判断总结

    • ?? 空合并运算符,适用于判断,基本数据类型字符串
    • if let/var
    • guard let/var ..else{break or return}

    循环

    • 和C的不同
      • ++ 语法废弃,改为+=
      • c风格的循环被废弃
    • for in
      • 0..<9 范围 0 - 8
      • 0...9 范围 0 - 9
    • '_'
      • 编译忽略

    字符串

    • 特点

      • String字符串类型,通过结构体实现的,更加轻量级,支持快速遍历,NSString中的并不支持,String可以和NSString无缝的转换
      • NSString继承NSObiect是一个对象,不支持遍历
    • 声明

      • var str:String = "Hello World"
    • 长度的计算

      let str: String = "听说爱笑的人运气都不会太差哟!"
      let len = str.lengthOfBytes(using: .utf8)
      print(len)
      let length = str.characters.count
      print(length)
      
      • 遍历
      let str: String = "听说爱笑的人运气都不会太差哟"
      
      for s in str.characters {
          print(s)
      }
      
      • 合并,转换,格式化
      let str1 = "你若安好"
      let str2 = "便是晴天"
      let str = str1 + str2
      print(str)
      let name = "蛋蛋"
      let age = 18
      //调用构造函数通过传入数字得到字符串
      let des1 = name + String(age)
      
      //"()" 将对象转义为字符串
      let des2 = name + "(age)"
      print(des2)
      
      //字符串的格式化
      // 09:10:02
      let h = 9
      let m = 10
      let s = 2
      let time = String(format: "%02d:%02d:%02d", h,m,s)
      print(time)
      

    数组

    • 格式

      • 使用[]定义数组
      • [String]是一个泛型数组只能够存放字符串对象
    • 空数组

      • String
    • 可变or不可变

      • let 声明的是不可变的数组
      • var 是可变的数组
    • 增/删/改/遍历

       var array = ["张三","姜丝"]
      //增 
      array.append("外婆")
      array.insert("杰克", at: 0)
      
      //改
      array[0] = "肉丝"
      //删
      //array.remove(at: 0)
      //array.removeFirst()
      //print(array)
      //array.removeLast(2)
      //遍历
      for name in array {
          print(name)
      }
      
      for index in 0..<array.count {
          let name = array[index]
          print(name)
      }
      
      //遍历角标和元素
      print("------------------------")
      for (offset,value) in array.enumerated() {
          print(offset,value)
      }
      //倒序遍历
      for name in array.reversed() {
          print(name)
      }
      
      

    字典

    • 格式

      • 使用[:]定义字典
      • [String : String]是一个泛型字典类型
    • 空数组

    • 可变or不可变

      • let 不可变的字典
      • var 可变的字典
    • 增/删/改/遍历

      	 var dict = ["name" : "磊哥", "age" : "18"]
          dict["des"] = "每天都被自己帅醒"
          print(dict)
          dict.removeValue(forKey: "des")
          print(dict)
          //遍历
          for (key,value) in dict {
              print(key,value)
          }
      
          //合并
          let dict1 = ["title" : "帅哥"]
          for (key,value) in dict1 {
              dict[key] = value
          }
          print(dict)
      
    不忘初心,方得始终
  • 相关阅读:
    传输层——UDP报文头介绍
    传输层——TCP报文头介绍
    网络层——IP报文头介绍
    数据链路层——以太网包头介绍
    POJ2752 (Seek the Name, Seek the Fame,kmp)
    POJ2406 Power Strings
    HNOI2008 玩具装箱toy (BZOJ1010,斜率dp)
    Covered Walkway(HDU4258,dp斜率优化)
    HDU3507 Print Article
    POJ1821 Fence
  • 原文地址:https://www.cnblogs.com/jialiangliang/p/6606955.html
Copyright © 2020-2023  润新知