swift之属性

知识点总结:

1、存储属性

struct Town{
    let region = "South" //只读属性
    var population = 5422 //读写属性
}

2、惰性存储属性

对于属性来说,惰性加载意味着属性的值只在第一次访问的时候才会出现,因此lazy属性必须声明为var。注意:标记为lazy的属性只会被计算一次。

struct Town{
    let region = "South" //只读属性
    var population = 5422 //读写属性

    enum Size {
        case small
        case middle
        case large
    }

    lazy var townSize:Size = {
        switch self.population {
        case 0...10000:
            return Size.small
        case 10001...100000:
            return Size.middle
        default:
            return Size.large
        }

    }()
}

解释两点:1、self.population中self重要性:这个闭包必须引用self才能在闭包内访问到这个实例的population属性;2、这个地方为什么要用惰性属性:为了让闭包能安全地访问self,编译器必须知道self已经初始化完成了。把townSize标记为lazy是告诉编译器这个属性不是创建self所必须的;如果它不存在,就应该在它第一次被访问的时候创建。这就告诉编译器:当闭包被调用时,self肯定已经可用了。

3、计算属性

只读计算属性

struct Town{
    var population = 2300
}

class Monster{
    var name = "Monster"
    var town:Town?
    var victimPool:Int{
        get{
            return town?.population ?? 0
        }
    }

}

可读写计算属性

struct Town{
    var population = 2300
}

class Monster{
    var name = "Monster"
    var town:Town?
    var victimPool:Int{
        get{
            return town?.population ?? 0
        }
        set{
            town?.population = newValue
        }
    }

}

4、属性观察者

属性观察者对于任何自定义的存储属性和任何继承的属性都可用。自定义的计算属性不能用属性观察

struct Town{
    var population = 2300 {
        willSet{
            print("The population will change from \(population) to \(newValue)")
        }
        didSet{
            print("The population has changed from \(oldValue) to \(population)")
        }
    }
}

5、类型属性

类型属性对于类型是通用的,他们的值在同类型实例间共享的。值类型(结构体和枚举)既可以有存储类型属性、也可以有计算类型属性,值类型的类型属性以关键字static开头。类也可以有存储类型属性和计算类型属性,语法上如果用static,则子类不能覆盖父类的类属性,如果用class关键字,子类能为某个类属性提供自己的实现。

原文地址:https://www.cnblogs.com/yongbufangqi1988/p/8435933.html

时间: 2024-08-07 02:29:15

swift之属性的相关文章

Swift中属性Properties

1. 相比较于Java,Swift中属性很有意思,有很多分类:存储属性.计算属性和类型属性等等. 2. 存储属性 存储属性:一个存储属性就是存储在特定类或结构体的实例里的一个常量或变量,存储属性可以是变量存储属性(用关键字var定义),也可以是常量存储属性(用关键字let定义). 如果创建了一个结构体的实例并赋值给一个常量,则无法修改实例的任何属性,即使定义了变量存储属性,代码如下: let rangeOfFourItems = FixedLengthRange(firstValue: 0, l

Swift静态属性

在介绍静态属性之前,我们先来看一个类的设计,有一个Account(银行账户)类,假设它有3个属性:amount(账户金额).interestRate(利率)和owner(账户名).在这3个属性中,amount和owner会因人而异,不同的账户这些内容是不同的,而所有账户的interestRate都是相同的.amount和owner属性与账户个体有关,称为实例属性.interestRate属性与个体无关,或者说是所有账户个体共享的,这种属性称为静态属性或类型属性.3种面向对象类型(结构体.枚举和类

swift 获取属性列表 class_copyPropertyList

在当前类中 调用这个方法 -- 就可以获取 这个类中所定义的属性 - func getPropertieNames(){ var outCount:UInt32 outCount = 0 var peopers:UnsafeMutablePointer<objc_property_t>! =  class_copyPropertyList(self.classForCoder, &outCount) var count:Int = Int(outCount); println(outC

Swift存储属性

类是由属性和方法组成,属性一般是访问数据成员,在Object-C中,属性是为了访问封装后的数据成员而设计,属性本身不存储数据,数据是由数据成员存储的,而Swift中的属性分为存储属性和计算属性,存储属性就是Object-C中的数据成员,计算属性不存储数据,但可以通过计算其他属性返回值 存储属性可以存储数据,分为常量属性和变量属性 存储属性适用于类和结构体两种面向对象结构类型,枚举属性没有存储属性 1.存储属性概念 class Employee{          let no:Int = 0  

Swift计算属性

一.计算属性的概念 计算属性本身不存储数据,而是从其它存储属性中计算得到数据,与存储属性不同,类.结构体.和枚举都可以定义计算属性 计算属性提供了一个getter来获取值,以及一个可选的setter来间接设置其它属性或变量的值,计算属性的语法如下: 面向对象类型 类型名{ 存储属性... var 计算属性名:属性数据类型{ get { return 计算后属性值 } set 新属性值{ } } 示例: class Employee {             var no:Int = 0    

Swift的属性,方法,下标脚本以及继承

从这篇章节起,Swift编程语言指南大部分的重要内容在于概念,代码并非太多.理解Swift的面向对象理念,语法以及类结构,构造析构过程对于非常好的应用Swift语言将会有比較大的帮助. 属性 存储属性 存储属性一般是那些可以通过直接赋值,或者直接訪问成员可以获得的属性类型. 它有些要注意的地方: 若一个结构体被声明为常量,则子属性无法被改动了.在Objective-C中,我们总是无法改动结构体的子属性,可是swift却能够,只是这样的情况是个例外,当你存储型属性是个结构体而且是个常量,那你就不要

Swift 模型属性

1 .  // 定义模型属性时,一般定义为可选的,可以简化代码,不需要写 init 方法    // 如果是基本数据类型,不能设置为可选的,而且要设置初始值 var name: String? var age: Int = 0 private var title: String? 2. 如果不是可选的 var name: String 第一种 // 无参数初始化时, 要加关键字 `override` override init() { name = "老王" } 第二种 // 初始化方

Swift—静态属性- 备

我先来设计一个类:有一个Account(银行账户)类,假设它有3个属性:amount(账户金额).interestRate(利率)和owner(账户名). 在这3个属性中,amount和owner会因人而异,不同的账户这些内容是不同的,而所有账户的interestRate都是相同的. amount和owner属性与账户个体有关,称为实例属性.interestRate属性与个体无关,或者说是所有账户个体共享的,这种属性称为静态属性或类型属性. 面向对象类型(结构体.枚举和类)都可以定义静态属性,它

Swift - 类型属性(类静态属性)和类方法(类静态方法)

1,结构体struct和枚举enum的静态属性,静态方法使用static关键字 1 2 3 4 5 6 7 8 9 10 struct Account {      var amount : Double = 0.0                 //账户金额      var owner : String = ""                   //账户名      static var interestRate : Double = 0.668  //利率     stat