Swift 4.0 属性(Properties)

apple官方文档

  • 懒加载
class DataImporter {
    var filename = "date.txt"
}

class DataManager {
    lazy var importer = DataImporter()
    var data = [String]()
}
let manager = DataManager()
//当第一次使用时才创建实例
manager.importer.filename
  • set 和get方法:set方法会有一个默认的newValue值
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()
    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 {
            origin.x = newValue.x - size.width/2
            origin.y = newValue.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)
print("square.orgin is now at \(square.origin.x), \(square.origin.y)")
  • 只读属性
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)")
  • 观察者属性:willSet会有一个newValue值,didSet会有一个oldValue值
class StepCounter {
    var totalSteps: Int = 0 {
        willSet {
            print("About to set totalSteps to \(newValue)")
        }
        
        didSet {
            if totalSteps > oldValue {
                print("Added \(totalSteps-oldValue) steps")
            }
        }
    }
}

let stepCount = StepCounter()
stepCount.totalSteps = 200
stepCount.totalSteps = 360
  • 类型属性:OC没有,类型属性zhi
class SomeClass {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
        return 27
    }
    class var overrideableComputedTypeProperty: Int {
        return 107
    }
}
SomeClass.overrideableComputedTypeProperty
SomeClass.computedTypeProperty

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
    }
    case north, west, south, east
}

SomeEnumeration.computedTypeProperty
SomeEnumeration.north

你可能感兴趣的:(Swift 4.0 属性(Properties))