美文网首页
属性和方法

属性和方法

作者: 哈啰于先生 | 来源:发表于2019-08-26 11:24 被阅读0次

1、属性

存储属性
struct FixedLengthRange {
    var firstValue: Int
    let length: Int
}
var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
// 该整数范围表示整数值 0、1 和 2
rangeOfThreeItems.firstValue = 6
// 该整数范围现在表示整数值 6、7 和 8
延迟存储属性
class DataImporter {
    /*
    DataImporter 是一个从外部文件导入数据的类。
     假设该类需要花费大量时间来初始化。
    */
    var filename = "data.txt"
    // DataImporter 类将在此处提供数据导入功能
}

class DataManager {
    lazy var importer = DataImporter()
    var data = [String]()
    // DataManager 类将在此处提供数据管理功能
}

let manager = DataManager()
manager.data.append("Some data")
manager.data.append("Some more data")
// 类型为 DataImporter 的 importer 属性实例尚未创建
计算属性
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(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)
print("square.origin is now at (\(square.origin.x), \(square.origin.y))")
// 打印 "square.origin is now at (10.0, 10.0)"
只读计算属性

只有 getter 方法但没有 setter 方法的计算属性称为 只读计算属性 。只读计算属性始终返回一个值,可以通过点语法访问,但不能给它赋值。

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)")
// 打印 "the volume of fourByFiveByTwo is 40.0"
属性观察器

属性观察器会观察并对属性值的变化做出反应。每次设置属性值时都会调用属性观察器,即使新值与属性的当前值相同。

class StepCounter {
    var totalSteps: Int = 0 {
        willSet(newTotalSteps) {
            print("将要设置 totalSteps 为 \(newTotalSteps)")
        }
        didSet {
            if totalSteps > oldValue  {
                print("增加了 \(totalSteps - oldValue) 步")
            }
        }
    }
}
let stepCounter = StepCounter()
stepCounter.totalSteps = 200
// 将要设置 totalSteps 为 200
// 增加了 200 步
stepCounter.totalSteps = 360
// 将要设置 totalSteps 为 360
// 增加了 160 步
stepCounter.totalSteps = 896
// 将要设置 totalSteps 为 896
// 增加了 536 步

2、方法

实例方法
class Counter {
    var count = 0
    func increment() {
        count += 1
    }
    func increment(by amount: Int) {
        count += amount
    }
    func reset() {
        count = 0
    }
}
实例方法中修改值类型

结构体和枚举是 值类型 。默认情况下,无法在其实例方法中修改值类型的属性。
你可以通过在方法的 func 关键字前放置 mutating 关键字来选择开启此行为

struct Point {
    var x = 0.0, y = 0.0
    mutating func moveBy(x deltaX: Double, y deltaY: Double) {
        x += deltaX
        y += deltaY
    }
}
var somePoint = Point(x: 1.0, y: 1.0)
somePoint.moveBy(x: 2.0, y: 3.0)
print("The point is now at (\(somePoint.x), \(somePoint.y))")
// 打印 "The point is now at (3.0, 4.0)"
类型方法
class SomeClass {
    class func someTypeMethod() {
            // 这里是类型方法的实现细节
    }
}
SomeClass.someTypeMethod()

相关文章

  • 对象

    拥有一些属性拥有一些方法的这样一个集合 创建对象 属性和方法 增加属性和方法 修改属性和方法 删除属性和方法 ob...

  • 构造函数ES5和ES6对比

    封装: 1、通过构造函数添加属性和方法(即:通过this定义属性和方法) 缺点:通过this定义的属性和方法,我们...

  • 属性和方法

    1、属性 存储属性 延迟存储属性 计算属性 只读计算属性 只有 getter 方法但没有 setter 方法的计算...

  • 属性和方法

    属性和方法 class PyClass:... lesson = 'python'... def ...

  • ES5、ES6继承

    ES5、ES6继承方式 继承的目标: 父类公有属性和方法为子类公有属性和方法父类私有属性和方法为子类私有属性和方法...

  • JavaScript基础知识点--event对象常用属性和方法

    event常用属性和方法 常用属性和方法表 属性或方法说明type事件的类型srcElement/target事件...

  • iOS:用delegate调用属性和方法,添加属性和方法

    delegate 本质为类增加属性和方法,可以用delegate调用未知对象的属性和方法,为已知对象添加属性和方法...

  • 关于构造函数中this和prototype定义的属性和方法的不同

    this定义的属性和方法,是生成的每个实例有属于自己的属性和方法; prototype定义的属性和方法,是每个实例...

  • 原型继承

    一、原型判断方法*术语解释:成员=属性+方法实例成员:实例属性和实例方法原型成员:原型对象属性和原型对象方法1、原...

  • UI基础篇-UITableView

    1.常用属性和方法 2代理方法 3.UITableViewCell常用属性和方法

网友评论

      本文标题:属性和方法

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