iOS Swift 学习手册 Swift收集文章首页投稿(暂停使用,暂停投稿)

Swift学习(九:属性和方法)

2016-07-30  本文已影响39人  爱偷懒的万万

属性

1.例子如下
    struct some{
            var firstValue :  Int
            let length : Int
    }
    var rangeOfThreeItems = FixedLengthRange(firstValue:0,length:3) //0,1,2
    rangeOfThreeItems,firstValue = 6      //6,7,8

但是 如果是这样

    let rangeOfThreeItems = FixedLengthRange(firstValue:0,length:3) //0,1,2
    rangeOfThreeItems,firstValue = 6      //报错

为什么会报错呢?
因为rangeOfThreeItems被声明成常量,即使firstValue是变量,也没办法修改值,结构体是值类型。当值类型的实例被声明为常量的时候,它的所有属性也就成了常量。但是如果是则可修改实例的变量属性,因为引用类型

2.延迟存储属性
    当第一次调用时才会计算初始值的属性。用`lazy`标示。

注意:只有变量var能被标示延迟存储,因为属性的初始值可能在实例构造完成之后才得到。
如果一个呗标记为lazy的属性在没有被初始化就同时被多个线程访问,则无法保证该属性会被初始化一次。

3.储存属性和实例变量

其中set如果没有自定义表示新值的参数名,可使用默认名称newValue

如果是只读属性,则可以省略get关键字和花括号

    struct Cuboid {
    var width = 0.0, height = 0.0, depth = 0.0
    var volume: Double {
    return width * height * depth
  }
}
  let fourByFiveByTwo = Cuboid(width: 4.0, height:5.0, depth: 2.0)
  print("the volume of fourByFiveByTwo is \    (fourByFiveByTwo.volume)")
  // 输出 "the volume of fourByFiveByTwo is 40.0"
4.属性观察器

当对某个属性进行操作之前或之后需要进行某个操作,可以用到属性观察器。

willSet观察器会将旧的属性值作为参数传入,可以为该参数命名或者使用默认参数名newValue
didSet观察器会将旧的属性值作为参数传入,可以为该参数命名或者使用默认参数名oldValue;如果在didSet方法中再次对该属性赋值,新值会覆盖旧值。

注意:父类的属性在子类的构造器中被赋值时,它在父类中的willSetdidSet 观察器会被调用,随后才会调用子类的观察器。在父类初始化方法调用之前,子类给属性赋值时,观察器不会被调用.

5.全局变量不需要标记lazy修饰符
6.类型属性

方法

1.实例方法

注意:创建Point实例的时候不能用常量let,只能用变量var,否则会报错。

2.类型方法
上一篇 下一篇

猜你喜欢

热点阅读