存储属性
struct FixedLengthRange {
var firstValue: Int
let length: Int
}var rangeOfThreeItems = FixedLengthRange(firstValue:0,length:3)
rangeOfThreeItems.firstValue = 6
常量结构体的存储属性
延迟存储属性
延迟存储属性是指当第一次被调用的时候才会计算其初始值的属性。在属性声明前使用lazy来表示一个延迟存储属性。 class DataImporter {
var fileName = "data.txt"
}
class DataManager {
lazy var importer = DataImporter()
var data = [String]()
} let manager = DataManager()
manager.data.append("some data")
manager.data.append("some more data")DataManager类包含一个名为data的存储属性,初始值是一个空的字符串数组。这里没有给出全部的代码,只需知道DataManager类的目的是管理和提供对这个字符串数组的访问即可。DataManager的一个功能是从文件导入数据。该功能由DataImporter类提供,DataImporter完成初始化需要消耗不少时间:因为它的实例在初始化时可能要打开文件,还要读取文件内容到内存。DataManager管理数据时也可能不从文件中导入数据。所以当DataManager的实例被创建时,没有必要创建一个DataImporter的实例,更;明智的做法是第一次用到DataImporter的时候才去创建。计算属性
struct Point {
var x = 0,y = 0
}
struct Size {
var width = 0,height = 0
}
struct Rect {
var origin = Point()
var size = Size()
var center: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,y:0),size:Size(width:10,height:10))
square.center = Point(x:15,y:15)如果计算属性的setter没有定义表示新值的参数名,则可以使用默认名称newValue。只读计算属性
struct Cuboid {
var width = 0.0, height = 0.0,depth = 0.0
var volume:Double{
return width * height * depth
}
}
属性观察器
class StepCounter {
var totalSteps: Int = 0{
willSet(newTotalSteps){
print("\(newTotalSteps)")
}
didSet{
if totalSteps > oldValue{
print("\(totalSteps - oldValue)")
}
}
}
}
let stepCounter = StepCounter()
stepCounter.totalSteps = 200
stepCounter.totalSteps = 360
stepCounter.totalSteps = 896
类型属性
struct SomeStructure {
static var storedTypeProperty = "some value"
static var computedTypeProperty: Int{
return 1
}
}
enum SomeEnumeration {
static var storedTypeProperty = "some value"
static var computedTypeProperty: Int{
return 6
}
}
class SomeClass {
static var storedTypeProperty = "some value"
static var computedTypeProperty:Int {
return 27
}
class var overrideableComputedTypeProperty: Int {
return 107
}
} print(SomeStructure.storedTypeProperty)
print(SomeEnumeration.storedTypeProperty)
print(SomeEnumeration.computedTypeProperty)
print(SomeClass.computedTypeProperty)取自《the swift programming language》中文版
267



被折叠的 条评论
为什么被折叠?



