设为首页 加入收藏

TOP

swift 2.2 语法 (中)(三)
2017-10-13 10:33:07 】 浏览:5387
Tags:swift 2.2 语法
结构体 struct touchPoint { var x : Double var y : Double } // 定义函数 func Range(point : touchPoint) -> Bool { let tempX = point.x - startX let tempY = point.y - startY // sqrt(n)用来计算n的平方根 // pow(x, n)用来计算x的n次方 let range = sqrt(pow(tempX, 2) + pow(tempY,2)) return range > 50 } // 创建结构体 let start = touchPoint(x:53.0, y:21.0) let end = touchPoint(x: 120.0, y: 320.0) // 调用函数 Range(point) // 结果:true
  • 结构体增强
    • 扩充构造函数
      • 默认情况下创建touchPoint时使用touchPoint(x:,y:)
      • 为了更加灵活地使用结构体,swift支持对构造函数进行扩充
      • 在扩充的构造函数中必须保证成员变量有值
      • 扩充的构造函数会覆盖原有的构造函数

截止至:5.17 —— 1:00 5.18继续

类的定义

  • swift也是面向对象开发的语言,而面向对象的基础是类,由类产生对象
  • 在swift中定义类使用 class 关键字
  • 类的注意点:
    • 定义的类可以没有父类,也就是这个类就是rootClass
    • 一般情况下,定义类的时候,继承自NSObject(但并不是OC中的NSObject)
  • 格式:class 类名 : 父类 {
    属性,方法
    }

  • 类的属性
    • siwft中类的属性分为:
      • 存储属性: 存储实例常量和变量的属性
      • 类属性:与整个类自身相关的属性
      • 计算属性:通过某些算法计算出来的属性
  • 存储属性
    • 存储属性是最简单的属性,作为类实例的一部分,用于存储变量和常量
    • 可给存储属性提供默认值,也可以在初始化方法中对其进行初始化


    //  定义person类
    class person: NSObject {
        //  定义存储属性
        var name : String?  //  名字
        var age : Int = 0   //  年龄
    }
    
    //  创建person对象
    let ps = person()
    
    //  给存储属性赋值
    ps.name = "stephen"
    ps.age = 23
    
  • 类属性
    • 类属性是与类相关联的属性,但不是与类实例相关联的属性
    • 所有的实例和类共有一份类属性,所以只要有某一处修改,这个类的属性就会被修改
    • 类属性的设置和修改必须通过类来完成
    • 类属性使用 static 来修饰


    //  定义person类
    class person: NSObject {
        //  定义存储属性
        var name : String?  //  名字
        var age : Int = 0   //  年龄
    
        //  类属性
        static var nickName : String?
    }
    
    //  设置类属性值
    person.nickName = "laoWang"
    //  打印
    print(person.nickName!) //  结果:laoWang
    
  • 计算属性
    • 计算属性并不会存储实际的值,而是提供一个getter和一个setter(可选类型)间接获取和设置其它属性
    • 一般情况下,只会提供getter方法,这种情况下的计算属性为只读属性,可以省略 get{}


    //  定义person类
    class person: NSObject {
        //  定义存储属性
        var foodIntake : Double = 0.0 //    人的食量(一顿吃几碗)
        var consume : Double = 0.0   //     消耗量
    
        //  定义计算属性(差值)
        var difference : Double {
            get {
                return (foodIntake - consume)
            }
    
            //  newValue是系统自动分配的变量名,内部用来存储新的值
            //  里面放的是get方法里面计算的值
            set {
                self.difference = newValue
            }
        }
    
    }
    
    //  创建person对象
    let  ps = person()
    
    ps.foodIntake = 50  //  吃的有点多肯定比我胖
    ps.consume = 25 //  消耗这么多惊呆小伙伴,看来是个肌肉男
    
    //  打印
    print(ps.difference)    //  结果 25.0
    

类的属性改变监听

  • OC里面我们可以重写set方法来监听属性值的改变
  • swift则需要通过属性观察者来监听和相应属性值的变化
  • 一般只会监听存储属性和类属性改变,计算属性我们不需要定义属性观察者,因为我们可以在计算属性的setter中直接观察并响应其值得变化
  • swift使用下面的观察方法定义观察者
    • willSet:在属性值被存储之前设置(新值会通过常量参数的方式传入,这个参数就是newValue,我们可以给这个参数定义参数名,但一般保持默认)
    • didSet:新值被存储后立即调用这个方法,和willSet相同,这时传入的值是属性的旧值,默认的参数名叫oldValue
    • willSet和didSet只在属性第一次被设置的时候才会调用,初始化的时候并不会调用这2个监听方法
class person: NSObject {
    var name : String? {
        
        willSet (newValue) {    //  属性即将改变时调用
            //  会传入系统默认的属性newValue,用来存储新值
            print("name:\(name), newValue:\(newValue)") //  结果:name:nil, newValue:Optional("laoWang")
        }
        
        didSet (oldValue) {
            //  会传入系统默认的属性oldValue,用来存储旧值
            print("name:\(name), oldValue\(oldValue)")  //  结果:name:Optional("laoWang"), oldValuenil
        }
    }
    
}

//  创建person对象
let ps : person = person()

ps.name = "laoWang"

类的构造函数

  • 默认情况下创建一个类的时候,就会调用一个构造函数
  • 就算我们没有编写任何构造函数,编译器也会提供一个默认的构造函数
  • 如果类继承自NSObject,可以对父类的构造函数进行重写
  • 构造函数和OC中的初始化方法init:相似
  • 构造函数使用
    • 类的属性必须有值
    • 如果在定义时没有初始化值,可以在构造函数内进行赋值


    class person: NSObject {
    
        var name : String
    
        //  因为继承自NSObject,我们就重写(父类)的构造方法
        //  override关键字表示调用父类方法
        override init() {
            //  在初始化name属性时没有给它赋值,所以可以在构造函数里面进行赋值
            name = "laoWang"
        }
    }
    
    //  创建person对象
    let ps : person = person()
    
    print(ps.name)  //  结果:laoWang
    
  • 初始化时给属性赋值
    • 一般我们在创建一个对象的时候就会同时给属性赋值,这时候我们可以自定义构造函数
    • 需要注意的:如果我
首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇深入剖析通知中心和KVO 下一篇iOS面试题总结 (三)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目