美文网首页
swift学习-属性、方法、下标

swift学习-属性、方法、下标

作者: JaneJie | 来源:发表于2015-08-14 10:28 被阅读240次

存储属性

最简单的情形,作为特定类或结构实例的一部分,存储属性存储着常量或者变量的值。存储属性可分为变量存储属性(关键字var描述)和常量存储属性(关键字let描述)。

struct FixedLengthRange {
var firstValue: Int
let length: Int
}
var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
// the range represents integer values 0, 1, and 2
rangeOfThreeItems.firstValue = 6
// the range now represents integer values 6, 7, and 8

常量结构实例的存储属性

如果你创建一个结构实例,并将其赋给一个常量,这个实例中的属性将不可以被改变,即使他们被声明为变量属性

let rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4)
 // 该区间表示整数0,1,2,3
 rangeOfFourItems.firstValue = 6
// 尽管firstValue诗歌变量属性,这里还是会报错

属于引用类型的类(class)则不一样,把一个引用类型的实例赋给一个常量后,仍然可以修改实例的变量属性。

延迟存储属性

延迟存储属性是指当第一次被调用的时候才会计算其初始值的属性。在属性声明前使用@lazy 来标示一个延迟存储属性。

class DataImporter {
/*
DataImporter 是一个将外部文件中的数据导入的类。
这个类的初始化会消耗不少时间。
*/
var fileName = "data.txt"
 // 这是􏰁供数据导入功能
}
class DataManager {11. @lazy 
var importer = DataImporter()
var data = String[]()
// 这是提供数据管理功能
 }
let manager = DataManager()
manager.data += "Some data"
manager.data += "Some more data"
// DataImporter 实例的 importer 属性还没有被创建

由于使用了@lazy,importer 属性只有在第一次被访问的时候才被创建。比如访问它的属性fileName 时:

 println(manager.importer.fileName)
// DataImporter 实例的 importer 属性现在被创建了
// 输出 "data.txt”

计算属性

除存储属性外,类、结构体和枚举可以定义计算属性,计算属性不直接存储值,而是提供一个 getter 来获取值,一个可选的 setter 来间接设置其他属性或变量的值。

struct Point {
 var x = 0.0, y = 0.0
 }
struct Size {
var width = 0.0, height = 0.0
}
struct Rect {
var origin = Point()
var size = Size()
varcenter: Point {
get{
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
 }
set(newCenter) {
origin.x = newCenter.x - (size.width / 2)
origin.y = newCenter.y - (size.height / 2)
 }
}
}
var square = Rect(origin: Point(x: 0.0, y: 0.0),
 size: Size(width: 10.0, height: 10.0))
let initialSquareCenter = square.center
square.center = Point(x: 15.0, y: 15.0)
println("square.origin is now at (\(square.origin.x), \(square.origin.y))")
// 输出 "square.origin is now at (10.0, 10.0)”

The Swift Programming Language中文版(CocoaChina精校)

属性监视器

属性监视器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性监视器,甚至新的值和现在的值相同的时候也不例外。可以为除了延迟存储属性之外的其他存储属性添加属性监视器,也可以通过重载属性的方式为继承的属性(包括存储属性和计算属性)添加属性监视器。

可以为属性添加如下的一个或全部监视器:

  • willSet 在设置新的值之前调用。监视器会将新的属性值作为固定参数传入,在 willSet 的实现代码中可以为这个参数指定一个名称,如果不指定则参数仍然可用,这时使用默认名称 newValue 表示。
  • 在新的值被设置之后立即调用。监视器会将旧的属性值作为参数传入,可以为该参数命名或者使用默认参数名 oldValue。
class StepCounter {
var totalSteps: Int = 0 {
willSet(newTotalSteps) {
 println("About to set totalSteps to \(newTotalSteps)")
}
didSet {
if totalSteps > oldValue {
println("Added \(totalSteps - oldValue) steps")
}
}
}
}
let stepCounter = StepCounter()
stepCounter.totalSteps = 200
// About to set totalSteps to 200
// Added 200 steps
stepCounter.totalSteps = 360
// About to set totalSteps to 360
// Added 160 steps
stepCounter.totalSteps = 896
// About to set totalSteps to 896
// Added 536 steps

相关文章

  • swift学习-属性、方法、下标

    存储属性 最简单的情形,作为特定类或结构实例的一部分,存储属性存储着常量或者变量的值。存储属性可分为变量存储属性(...

  • Swift之继承、构造过程

    继承 在Swift中 ,类可以调用和访问超类的方法,属性和下标脚本,并且可以重写这些方法,属性和下标脚本来优化或修...

  • Swift-继承(Inheritance)

    在Swift中 ,类可以调用和访问超类的方法,属性和下标脚本,并且可以重写这些方法,属性和下标脚本来优化或修改它们...

  • Swift 继承

    在 Swift 中,类可以调用和访问 超类的方法、属性和下标,并且可以重写这些方法,属性和下标来优化或修改它们的行...

  • Swift 扩展(extension)详解

    在Swift中扩展可以: 添加计算实例属性和计算类型属性; 定义实例方法和类型方法; 提供新构造器; 定义下标; ...

  • Swift知识点收集

    摘取自网络,自己有整理,被自己不断学习。 1. swift中如何阻止一个方法属性,属性,下标被子类改写? 在类的定...

  • iOS开发之Swift篇(13)—— 扩展

    目录 版本 扩展 计算型属性 方法 构造器 下标 嵌套类型 版本 Xcode 11.3.1Swift 5.1.3 ...

  • swift --1 extension扩展

    swift 中的扩展可以: 添加计算型属性和计算型静态属性 定义实例方法和类型方法 提供新的构造器 定义下标 定义...

  • Swift--属性、方法、下标、继承

    属性 存储属性 最简单情况下,作为特定类和结构体实例一部分的常量或者变量 常量结构体实例的存储属性 不能修改常量结...

  • swift 语法 属性 方法 下标 继承

    swift系列课程 promise 类似于 async awit 异步请求等待的操作,可以避免网络请求一层一层嵌套...

网友评论

      本文标题:swift学习-属性、方法、下标

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