1.创建一个Person的类继承NSObject
//
// Person.swift
// 005-计算型属性
//
// Created by 庄壮勇 on 2018/1/10.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
class Person: NSObject {
// getter & setter 仅供演示,日常开发不用!
private var _name: String ?
// Swift 中一般不会重写 getter 方法 和setter 方法
var name: String ? {
get {
// 返回成员变量
return _name
}
set {
// 使用 _成员变量 记录 值
_name = newValue
}
}
// OC 中定义属性的时候,有一个 readonly -> 重写 getter方法
var title: String {
// 只重写了 getter 没有重写 setter 方法
// 就是只读属性!
get {
return "Mr. " + ( name ?? "" )
}
}
// 只读属性的简写 - 直接 return
// 又称为 '计算型'属性 -> 本身不保存内容,都是通过计算获得结果
// 类似于一个函数
// - 没有参数
// - 一定有返回值
var title2: String {
print ( "计算 name: \ ( String (describing: name ) )" )
return "Mr XXX." + ( name ?? "" )
}
// 懒加载的title,本质是一个闭包
// 懒加载会在第一次访问的时候,执行,闭包执行结束后会把结果保存在 title3 中
// 后续调用,直接返回 title3
// 懒加载的属性会分配空间存储值!
lazy var title3: String ? = {
return "lazy" + ( self . name ?? "" )
}()
// Person.swift
// 005-计算型属性
//
// Created by 庄壮勇 on 2018/1/10.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
class Person: NSObject {
// getter & setter 仅供演示,日常开发不用!
private var _name: String ?
// Swift 中一般不会重写 getter 方法 和setter 方法
var name: String ? {
get {
// 返回成员变量
return _name
}
set {
// 使用 _成员变量 记录 值
_name = newValue
}
}
// OC 中定义属性的时候,有一个 readonly -> 重写 getter方法
var title: String {
// 只重写了 getter 没有重写 setter 方法
// 就是只读属性!
get {
return "Mr. " + ( name ?? "" )
}
}
// 只读属性的简写 - 直接 return
// 又称为 '计算型'属性 -> 本身不保存内容,都是通过计算获得结果
// 类似于一个函数
// - 没有参数
// - 一定有返回值
var title2: String {
print ( "计算 name: \ ( String (describing: name ) )" )
return "Mr XXX." + ( name ?? "" )
}
// 懒加载的title,本质是一个闭包
// 懒加载会在第一次访问的时候,执行,闭包执行结束后会把结果保存在 title3 中
// 后续调用,直接返回 title3
// 懒加载的属性会分配空间存储值!
lazy var title3: String ? = {
return "lazy" + ( self . name ?? "" )
}()
}
2.ViewController
//
// ViewController.swift
// 005-计算型属性
//
// Created by 庄壮勇 on 2018/1/10.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
let p = Person ()
override func viewDidLoad() {
super . viewDidLoad ()
// 只要调用过一次,懒加载后面的闭包就再也不会执行了!
// p.title3 = nil
//let p = Person()
// setter
p . name = "老王"
// getter
print ( p . name )
print ( p . title )
// Cannot assign to property: 'title' is a get-only property
// 不能给 get-only 属性设置值
// p.title = "老张"
print ( p . title2 )
// 不能修改只读属性
// p.title2 = "XXX"
print ( p . title3 )
}
override func touchesBegan( _ touches: Set < UITouch >, with event: UIEvent ?) {
p . name = "花花"
print ( p . title2 )
print ( p . title3 )
// ViewController.swift
// 005-计算型属性
//
// Created by 庄壮勇 on 2018/1/10.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
let p = Person ()
override func viewDidLoad() {
super . viewDidLoad ()
// 只要调用过一次,懒加载后面的闭包就再也不会执行了!
// p.title3 = nil
//let p = Person()
// setter
p . name = "老王"
// getter
print ( p . name )
print ( p . title )
// Cannot assign to property: 'title' is a get-only property
// 不能给 get-only 属性设置值
// p.title = "老张"
print ( p . title2 )
// 不能修改只读属性
// p.title2 = "XXX"
print ( p . title3 )
}
override func touchesBegan( _ touches: Set < UITouch >, with event: UIEvent ?) {
p . name = "花花"
print ( p . title2 )
print ( p . title3 )
}
}