美文网首页
Swift学习笔记一

Swift学习笔记一

作者: 知交 | 来源:发表于2017-09-28 15:00 被阅读10次

    1.可选类型Optional

    • ? 可以为 nil , !不能为nil
    • 强制解析 myString! (访问myString)
    • 自动解析 var myString:String!
    • 可选绑定 var myString:String?

    循环

    • while
    • repeat { }while
    • continue语句:停止本次循环 开始下次循环
    • break :会立刻结束整个控制流的执行
    • fallthrough:如果在case执行完后,继续执行下面的case,需要使用fallthrough(贯穿)关键字。

    字符串

    1. 字符串字面量

       var stringA = "Hello"
      
    2. String 实例化

       var stringB = String("Swift!");
      
    3. stringA.isEmpty (判断是否为空)

    4. Siwft4.0 修改:String成Collection类型

       let greeting = "Hello Mars"
       print(greeting.count)
       greeting.forEach{print($0)}
      

    字符 Character

    1. 不能创建空的 Character

    2. 字符串连接字符

       let charB: Character = "B"
       var str:String = "Hello"
       str.append(charB)
      

    数组

    1. 创建:

       var arry1: Array<Int> = Array<Int>()
      
       var someInts = [Int](repeating: 0, count: 3)
      
       var somebInts:[Int] = [10, 20, 30]
      
    2. 访问数组:

           //1
           var someVar = somebInts[0]
           //2
           Array(somebInts[0..<2]) 
      
    3. 修改

       arrInts[2] = 50
      
    4. 删除

       //1
       arrInts.remove(at: 2)
       //2
       arrInts.removeLast()
      
    5. 遍历数组

       //1
       for (index, item) in arrInts.enumerated() {
           print("\(index),\(item)")
       }
       //2.
       arrInts.forEach {print($0)}
       //3. for-in
      
    6. 合并数组

        var ints = somebInts + arrInts
      
    7. count 、 isEmpty

    字典

    1. 创建

       //1
       var dict = [Int: String]() //key为int value为String
       //2
       var dic:[Int: String] = [1:"One", 2:"Two", 3:"Three"]
      
    2. 访问 dic[key]

    3. 修改字典

       //1.updateValue
       var oldVal = dic.updateValue("One 的新值", forKey:1)
       var dd = dic[1]
        //2.通过key来修改
       dic[1] = "最新 One值"
       print(String(describing:dic[1]))
      
    4. 移除key-value对

       //1.removeValue
       var removedValue = dic.removeValue(forKey: 2)
       //2.
       dic[2] = nil
      
    5. 遍历字典

      //1. for-in
      //2. enumerate
      
    6. 字典转数组

       let dictkeys = [Int](someDict.keys)
       let dictValues = [String](someDict.values)
      
    7. count , isEmpty

    函数

    1. 常量,变量及I/O参数
    • 如果想要声明一个变量参数,可以在参数定义前加 inout 关键字,这样就可以改变这个参数的值了。

    • 当传入的参数作为输入输出参数时,需要在参数名前加 & 符,表示这个值可以被函数修改。

        func swapTwoInts(_ a: inout Int, _ b: inout Int)    {
        let temporaryA = a
        a = b
        b = temporaryA
        }
        var x = 1
        var y = 5
        swap(&x, &y)
      

    2.嵌套函数

        func qiantaohanshu(fordec total: String) -> (String) -> String {
            func neihanshu (haha: String) -> String{
                return total + haha
            }
            return neihanshu
        }
        let diaoyong = qiantaohanshu(fordec: "天啊")
        diaoyong("好的")
        qiantaohanshu(fordec: "我是")("徐征")
        //打印结果为 我是徐征
    

    闭包 Closures

    1. 表达式

       let divide = {(val1: Int, val2: Int) -> Bool in
            return val1 > val2
       }
       let result = divide(20,30)
       print(result)
      
    2. 尾随闭包:尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用

    3. 闭包是引用类型:这也意味着如果您将闭包赋值给了两个不同的常量/变量,两个值都会指向同一个闭包:

    集合 Set

        var vowel: Set<Character> = ["a", "e", "i", "o", "u"]
        vowel.count
        vowel.isEmpty
    
        vowel.contains("a")
        type(of: vowel.remove("a"))
        vowel.insert("a")
        //vowel.removeAll()
    
        for character in vowel.sorted() {
            print(character)
        }
        //
        vowel.forEach{print($0)}
    

    结构体 struct 枚举 enum

    • 都是值类型

    类 Class

    • 引用类型
    • 恒等运算符 ===:如果两个常量或者变量引用同一个类实例则返回 true
    • 不恒等运算符 !== 如果两个常量或者变量引用不同一个类实例则返回 true

    属性

    1. 延迟存储属性 lazy :

      ('var' 关键字是必须的)

       class samples {
           lazy var no = number() //'var' 关键字是必须的
       }
      
       class number {
           var name =  "是小鸟"
       }
       var firstSample = samples()
       print(firstSample.no.name)
      
    2. 计算属性 getter setter

    3. 只读计算属性 getter

    4. 属性观察值: 可以为除了延迟存储属性之外的其他存储属性添加属性观察器,也可以通过重载属性的方式为继承的属性(包括存储属性和计算属性)添加属性观察器。

      注意: 不需要为无法重载的计算属性添加属性观察器,因为可以通过 setter 直接监控和响应值的变化。

       //willSet 在设置新的值之前调用
       //didSet 在新的值被设置之后立即调用
       //willSet和didSet观察器在属性初始化过程中不会被调用
       
       class Samplepgm {
           var counter: Int = 0 {
               willSet(newTotal) {
                   print("计数器:\(newTotal)")
               }
               didSet {
                   if counter > oldValue {
                       print("新增数\(counter - oldValue)")
                   }
               }
           }
           
       }
      
       let NewCounter = Samplepgm()
       NewCounter.counter = 100
       NewCounter.counter = 800
      
    5. 类型属性:类型属性是作为类型定义的一部分写在类型最外层的花括号({})内。

      使用关键字 static 来定义值类型的类型属性,关键字 class 来为类定义类型属性。

       //static
       struct StructName {
           static var storedTypeProperty = " "
           static var computedTypeProperty: Int {
               //这里返回 一个 Int 值
               return 30
           }
       }
       //class
       class ClassNames {
           class var computedTypeProperty: Int {
               //这里返回一个 Int 值
               return 27
           }
       }
      
    • 类似于实例的属性,类型属性的访问也是通过点运算符(.)来进行。但是,类型属性是通过类型本身来获取和设置,而不是通过实例

    相关文章

      网友评论

          本文标题:Swift学习笔记一

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