美文网首页
Swift之基础知识大回顾(一)

Swift之基础知识大回顾(一)

作者: woniu | 来源:发表于2019-10-15 17:54 被阅读0次

    1、常量:它的值不要求在编译时期确定,但是使用之前必须赋值1次

    let age1 = 10
    
    let age2 : Int //声明为Int类型
    age2 = 20
    
    func getAge() -> Int{
        return 30
    }
    
    let age3 = getAge()
    

    2、常量、变量在初始化之前都不能使用。

    let weight : Int
    var height : Int
    //直接使用是错误的,因为没有初始化
    //print(height)
    

    3、标识符:常量名、变量名、函数名、打出来的图案等,几乎可以是任何字符;

    注意:标识符不能以数字开头,不能包含空白字符、制表符、箭头等特殊字符。

    func 🐂(){
        print(666)
    }
    

    4、常见的数据类型

    4.1 值类型:枚举enum、结构体struct
    4.2 引用类型:类class

    5、字面量 : 布尔、字符串、字符、整数、浮点数、字典、数组

    let bool = false
    let name = "zhangkai"
    let character : Character = "🐶"
    let dic : [String : Any] = ["weight" : 123,"age" : 18,"name":"zhangkai"]
    let arr = [1,2,4,5,6,7]
    

    6、类型转换 低类型向高类型转换

    let int1 : UInt16 = 2000
    let int2 : UInt8 = 1
    let int3 = int1 + UInt16(int2)
    

    字面量可以直接相加,因为数字字面量本身没有明确的类型。
    let result = 3 + 0.1415926

    7、元组

    let http404Error = (404,"Not Found")
    http404Error.0
    
    7.1接收元组
    let (statusCode,statusMessages) = http404Error
    print(statusCode,statusMessages)
    
    7.2添加标识符
    let http200Success = (statusCode : 200,statusMessages: "Not Found")
    http200Success.statusCode
    

    8、这里相当于do while

    var num = -1
    repeat{
        print("num is \(num)")
    }while num > 0
    

    9、switch case后面不加break默认有,不会一直走下去,和OC不同

    var number = 1
    switch number {
    case 1:
        print("第一种情况")
        fallthrough
    case 2:
        print("第二种情况")
    case 3:
        print("第三种情况")
    default:
        break
    }
    
    9.1使用fallthrough可以实现贯穿的效果哦,但是只能贯穿一层
    9.2 switch必须保证能处理所有情况,也就是要有default,当然,如果能保证处理已知的所有情况,不用default也行。
    enum Answer{case right,wrong}
    let answer = Answer.right
    switch answer {
    case Answer.right:
        print("right")
    case Answer.wrong:
        print("wrong")
    }
    
    9.3 switch支持string和Character类型
    let string = "Jack"
    switch string {
    case "jack":
        print("I look")
    case "rose":
        print("I'm jump!")
    default:
        break
    }
    
    9.4 区间、元组匹配
    let count = 61
    switch count {
    case 0:
        print("none")
    case 1..<10:
        print("litter")
    case 10...100:
        print("big")
    default:
        break
    }
    

    10、属性
    swift中跟市里相关的属性可以分为两大类:存储属性和计算属性。
    a、 存储属性

    • 类似于成员变量的概念
    • 存储在实例的内存中
    • 结构体、类可以定义存储属性
    • 枚举不可以定义存储属性
      在创建类或者结构体实例时,必须为所有存储属性设置一个合适的初始值:
    • 在初始化器离为存储属性社会组一个初始值。
    • 可以分配一个默认的属性值左右属性定义的一部分。

    b、计算属性

    • 本质就是方法(函数)
    • 不占用实例的内存
    • 枚举、结构体、类都可以定义计算属性
      set传入的新值默认叫做newValue,也可以自定义。只读计算属性只有get没有set。
    struct Cicle{
          var redius: Double
          var diameter: Double {
                set(newDiameter) {
                redius = newDiameter/2
           }
               get{
              redius*2
              }
          }
    }
    
    

    注意:
    计算属性只能用var,不能用let。因为计算属性的值时可能发生变化的。

    延迟存储属性(Lazy)
    使用lazy可以定义一个延时存储的属性,在第一用到属性的时候才会进行初始化。如果多线程同时第一次访问lazy属性,无法保证属性只被初始化一次。
    当结构体包含一个延迟存储属性的时候,只有var才能访问延迟存储属性,因为延迟属性初始化时需要改变结构体内存。

     struct Point{
        var x = 0
        var y = 0
        lazy var z = 0
    }
    let p = Point()  //此处必须使用var来声明。
    print(p.z) (wrong!!!)
    

    属性观察器:

    • 可以为非lazy的var存储属性设置属性观察器
    struct Circle{
        var radius: Double{
              willSet {
                  print("willSet",newValue)
        }
            didSet{
                  print("didSet",oldVaule,radius)
        }
         init() {
                self.radius = 1.0  
                print("Circile init!")
        }
      }
    }
    

    注意:
    1、初始化器中设置属性值不会触发willSet和didSet。
    2、属性定义初始值时也不会触发willSet和didSet。

    相关文章

      网友评论

          本文标题:Swift之基础知识大回顾(一)

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