可选项
解包:
! :做计算 ,需要强行解包,必须有值
? :只调方法,可有可无值 ,如果没有值,则什么都不做
as! : 前面的一定有值
as?:前面的值为可选值
as : NSString as String ; NSArray as [] ; NSDictionary as []
**if let / guard let as? 此处一定是用as?**
懒加载
lazy var label: UILabel = UILabel()
完整的写法:(日常开发不建议这样写)
lazy var label = {()->UILabel in
let l = UILabel()
//可以设置label的属性
return l
}()
懒加载Swift和OC的区别
1.swift的懒加载 只会在第一次调用的时候执行,然后将闭包的结果保存在label的属性中
2.在swift中,一定注意不要主动清理视图或者控件,因为懒加载不会再次创建
getter 和setter
class Person: NSObject {
//一般不用
private var _name : String?
var name : String?{
get{
return _name
}
set{
_name = newValue
}
}
只读属性(计算型函数,有返回值,不保存内容)
//readonly只读属性
var tiitle : String?{
get{
return "Mr." + (name ?? "")
}
}
简写
var tiitle : String?{
return "Mr." + (name ?? "")
}
didset
var tiitle : String?{
didset{
//已经有值了,
}
}
反射机制(开发团队中,为了解耦)
NSClassFromString(swift有命名空间)
performSelector
responseSelector
responsePotocol
动态获得命名空间
let ns = Bundle.main.infoDictionary?["CFBundleName"] as? String ?? ""
let clsName = ns + "." + "ViewController"
此方法可以放入NSBundle的extension中
extension Bundle {
//利用对象函数 Bundle.main.nameSpace()
func nameSpace() ->String{
return infoDictionary?["CFBundleName"] as? String ?? ""
}
//计算型函数,此次调用 Bundle.main.nameSpace
var nameSpace:String{
return infoDictionary?["CFBundleName"] as? String ?? ""
}
}
网友评论