swift 属性的几个写法
来源:互联网 发布:舞台音乐控制软件 编辑:程序博客网 时间:2024/05/17 16:14
import Foundation
class Person : NSObject
{
//普通属性
var firstName = ""
var lastName = ""
var nickName = ""
//计算属性,不需要等号,不需要初始值,swift要求存储属性在对象构造完毕后必须有初始值,计算属性好像没有要求
var fullName:String{
set{
//如果没有set,就是只读属性
print(newValue)
}
get{
return nickName + " " + firstName + " " + lastName
}
}
//带属性监视器的普通属性,直接大括号,然后 didSet 就相当于oc的重写set方法
var age = 0{
//我们需要在age属性变化前做点什么
willSet{
print("Will set an new value \(newValue) to age ")
}
// 我们需要在age属性发生变化后,更新一下nickName这个属性
// didset里可以做以前oc在重写set时做的事
didSet{
print("age filed changed form \(oldValue) to -> \(age)")
if age<10{
nickName = "Little"
}else{
nickName = "Big"
}
}
}
比如经常重写的setModel
- (void)setModel{
_model = model
self.left.text = model.left
self.button .setTitle(model.button, forState: .Normal)
self.right.text = model.right
}
var model : MyModel!{
didSet{
self.left.text = model.left
self.button .setTitle(model.button, forState: .Normal)
self.right.text = model.right
}
}
// 懒加载, 后面的类型 :[Int] 不可以省略, 在{}后有个()
lazy var dataArray : [Int] = {
var array = [Int]()
for i in 0 ..< 100{
array.append(i)
}
print(self)
return array
}()
let block = {
print("我是一个闭包,")
}
lazy var lazyBlock = {
print("我是一个懒加载的闭包")
}
override var description: String {
return "Full Name: \(fullName) " + ", Age: \(age)"
}
deinit{
print("person 死了")
}
}
var me : Person! = Person()
me.firstName = "Zhang"
me.lastName = "San"
me.age = 20
me.block()
me.lazyBlock()
me.lazyBlock = { print("我是新产生的懒加载闭包,因为懒加载必须是var类型") }
me.lazyBlock()
print(me)
me = nil
/*程序输出
Will set an new value 20 to age
age filed changed form 0 to -> 20
我是一个闭包,
我是一个懒加载的闭包
我是新产生的懒加载闭包,因为懒加载必须是var类型
Full Name: Big Zhang San , Age: 20
person 死了
*/
总结:
1. 计算属性不需要=,因为不需要初始化,其他属性都需要=
2. 普通属性和带观察器的属性不需要类型,这两个可以根据类型推断得出,计算属性,lazy属性需要类型,在初始化结束时,这两个都是没有值的,所以需要带类型
3. lazy属性需要(),可能是为了和闭包有个区分吧,lazy属性 必须是var
在加一个单例的写法
//声明一个单例
class SingleClass: NSObject {
static let defaultManager = SingleClass.init()
var money = 13.5
}
let manager1 = SingleClass.defaultManager
print(manager1.money)
let manager2 = SingleClass.defaultManager
manager2.money = 3523
print(manager1.money)
/*
13.5
3523.0
*/
- swift 属性的几个写法
- 几个批处理的写法
- Swift单例的写法
- swift 单例的写法
- Swift单例的写法
- swift中单列的写法
- Swift 中CGAffineTransform的写法
- Swift中泛型的属性
- Swift for 的几个例子
- 几个学习swift的网站
- swift的tableView的系统写法
- 窗体的几个属性.
- request的几个属性
- CSS3的几个属性
- Tree的几个属性
- ExpandableListView 的几个属性
- ListView的几个属性
- AVCaptureDevice的几个属性
- HDU 1097 A hard puzzle(快速幂取模)
- HDU4260
- SSH框架整合
- linux窗口管理器学习
- 设计模式----适配器模式
- swift 属性的几个写法
- TableView 小技巧 (一)
- 0038关于父类与子类中的一道题(牛客)
- JAVA递归全排列
- 在腾讯云上部署tomcat+java+mysql项目
- java发邮件工具类
- 禅与摩托车维修艺术,又名万里任禅游
- sprintf(cmd_buff,"%s_bak.exe",pExeName);ShellExecuteA(NULL,"open",cmd_buff,argvs,
- leetcode——75——Sort Colors