swift 属性的几个写法

基础语法速查 http://www.jianshu.com/p/1c25105bba4f 

import Foundation

class Person : NSObject { 

  //普通属性
    var firstName = ""
    var lastName  = ""
    var nickName  = ""

    // 只读的属性,相当于readOnly
    // private(set) var name: String


  //计算属性,不需要等号,不需要初始值,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.leftLabel.text = model.title
        self.button.setTitle(model.title, forState: .Normal)
        self.rightLabel.text = model.desc
}


 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

补充一下常用的UIColor类别

extension UIColor {

    // 这样调用
//    UIColor.init(hex: 0x3234FF)
//    UIColor(hex: 0x1245ab, alpha: 0.5)
    convenience init(hex : UInt32 , alpha: CGFloat = 1.0) {

        let b: UInt32 = hex%256
        let g: UInt32 = (hex>>8)%256
        let r: UInt32 = (hex>>16)%256

        print(r.description + "\t" + g.description + "\t" + b.description)

        self.init(red: CGFloat(r)/255.0, green: CGFloat(g)/255.0, blue: CGFloat(b)/255.0, alpha: alpha)
    }

}

在加一个单例的写法

//声明一个单例

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

*/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值