美文网首页
Swift---10.属性

Swift---10.属性

作者: 阿丶伦 | 来源:发表于2017-02-28 17:40 被阅读10次
  • 属性(类,结构体或枚举中,某一个成员变量,就是该类,结构体或枚举的属性)

    • 存储属性

存在于类,结构体中,枚举中不存在,定义属性时,可以定义属性的类型,默认值.与定义变量常量相同,使用var表明该属性是变量,let表明该属性是常量.
class FirstClass { var firstValue:String? var secondValue = 2 let thirdValue = 3 } struct FirstStruct { var firstValue:String? var secondValue = 2 let thirdValue = 3 } //类是引用类型,就算被赋值给一个常量,也依然可以修改其值 let firstClass = FirstClass() firstClass.secondValue = 3 //报错,结构体是值类型,如果定义为常量,则所有的值都不可以被改变 let firstStruct = FirstStruct(firstValue: "first", secondValue: 3) firstStruct.secondValue = 4
- #####延迟存储属性
在成员名前,添加lazy关键字,表明该属性只会在使用到的时候才被创建,由于不是一开始就定义的成员,所以我们必须设置改成员为变量.lazy属性线程不安全
class FirstClass { var firstValue:String? lazy var secondValue:Int = { return 2 }() let thirdValue = 3 } let firstClass = FirstClass() firstClass.secondValue
- 计算属性(计算属性不存储值,它提供了setget方法,使我们可以间接的操作其他变量或者属性,写法为在计算属性的类型后添加尾随闭包,在闭包中添加setget方法,set方法中,系统默认为我们提供了newValue参数)
//定义一个结构体 struct number { var a = 0 var b = 0 } //定义类 class TestGetSet { var total:Int = 0 var number:number{ get { return self.number } set (newNumber) { total = newNumber.a + newNumber.b } } var number1:number{ get { return self.number } set { total = newValue.a + newValue.b } } } let test = TestGetSet() test.number = number(a: 3, b: 4) print(test.total)
- 只读计算属性(了解OC的,应该知道,定义类属性时,会有一个readOnly选项,即改属性只有getter没有setter,Swift中,对于计算属性同样提供了只读选项,只要闭包中不提供set方法,即指明该计算属性为只读属性.同样的,我们可以省略关键字get)
struct total { var a:Int = 0 var b:Int = 0 var total:Int{ return a+b } } let test = total(a: 10, b: 10) test.total
- 注意我们使用只读计算属性时,必须使用var关键字,因为只有变量才能改变值
- 属性监听者(属性拥有监听者,延迟存储除外,在属性的值改变时,他们会被调起.需要注意非继承的计算属性不需要添加监听者,因为我们可以在它的set方法中监听到属性的变动)
- willSet(即将设置时,跟计算属性的set方法一样,Swift也为其提供了默认的newValue)
- didSet(设置完成后,该方法提供了默认值为oldValue,在didSet方法中,对该属性的操作不会重新引起didSet的调用)
class Obersevers { var number:Int = 0{ willSet { print("将要设置number为\(newValue)") } didSet { print("number由\(oldValue)变为\(number)") } } } let oberse = Obersevers() oberse.number = 10
- 类属性(类似与OC中的类方法,可以由类直接调起,使用static定义,若想要让它的子类可以对其进行重写,需要使用class关键词)
class StaticTest { static var number = 10 static var numberTimeFive:Int{ return number * 5 } } print(StaticTest.numberTimeFive) StaticTest.number = 5 print(StaticTest.numberTimeFive)
- 使用闭包或函数设置属性的默认值
class SetDefault { var board:[Bool] = { var tempArray = [Bool]() var isBlack = false for i in 1...8 { for j in 1...8 { tempArray.append(isBlack) isBlack = !isBlack } isBlack = !isBlack } return tempArray }() func squareIsBlackAt(row: Int, column: Int) -> Bool { return board[(row * 8) + column] } } let setDefault = SetDefault() setDefault.squareIsBlackAt(row: 2, column: 1)

相关文章

  • Swift---10.属性

    属性(类,结构体或枚举中,某一个成员变量,就是该类,结构体或枚举的属性)存储属性 存在于类,结构体中,枚举中不存在...

  • 成员属性、静态属性、私有属性、原型属性

    一、成员属性和成员方法在构造函数中,通过this.属性声明,或者实例化出对象后,通过“对象.属性”追加的,都属于成...

  • swift 属性(存储属性、计算属性、懒加载属性、类型属性)

    存储属性 存储属性:用于存储一个常量或变量 结构体实例赋值给常量,该实例属性不能被修改(因为结构体属于值类型,当值...

  • jQuery属性操作

    attr(属性名,属性值)操作所有属性 removeAttr(属性名) prop(属性名,属性...

  • 依赖属性|简单属性|附加属性

    依赖属性 简单理解就是属性,支持继承,比如 Window 有 Font 属性,Button 也有 Font 属性,...

  • attribpromote

    属性创建。 属性名称,属性类别,默认属性,输出属性。 属性转移,atteibutrename. 在点属性上,现有属...

  • 网站基本情况记录

    各类属性: 样例: //辅助属性:属性//可确定同表的属性:属性//其他相关属性:属性 乐器相关属性 乐器id乐器...

  • 人生三属性

    人生三属性:可分为善良属性,激情属性,愚昧属性; 三属性又分为个性三属性、时间三属性、食物三属性。...

  • 03-第三章 函数、自定义属性、事件

    一、 变量与属性的区别 属性分节点属性 和js属性节点属性 :元素自带属性js属性:js中自定义的属性 当js属性...

  • Swift--属性与下标

    存储属性 计算属性 属性观察者 静态属性 使用下标 存储属性 存储属性概念 存储属性可以存储数据,分为常量属性(用...

网友评论

      本文标题:Swift---10.属性

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