可選項(xiàng)
解包:
! :做計(jì)算 ,需要強(qiáng)行解包,必須有值
? :只調(diào)方法,可有可無(wú)值 ,如果沒(méi)有值,則什么都不做
as! : 前面的一定有值
as?:前面的值為可選值
as : NSString as String ; NSArray as [] ; NSDictionary as []
**if let / guard let as? 此處一定是用as?**
懶加載
lazy var label: UILabel = UILabel()
完整的寫法:(日常開(kāi)發(fā)不建議這樣寫)
lazy var label = {()->UILabel in
let l = UILabel()
//可以設(shè)置label的屬性
return l
}()
懶加載Swift和OC的區(qū)別
1.swift的懶加載 只會(huì)在第一次調(diào)用的時(shí)候執(zhí)行,然后將閉包的結(jié)果保存在label的屬性中
2.在swift中,一定注意不要主動(dòng)清理視圖或者控件,因?yàn)閼屑虞d不會(huì)再次創(chuàng)建
getter 和setter
class Person: NSObject {
//一般不用
private var _name : String?
var name : String?{
get{
return _name
}
set{
_name = newValue
}
}
只讀屬性(計(jì)算型函數(shù),有返回值,不保存內(nèi)容)
//readonly只讀屬性
var tiitle : String?{
get{
return "Mr." + (name ?? "")
}
}
簡(jiǎn)寫
var tiitle : String?{
return "Mr." + (name ?? "")
}
didset
var tiitle : String?{
didset{
//已經(jīng)有值了,
}
}
反射機(jī)制(開(kāi)發(fā)團(tuán)隊(duì)中,為了解耦)
NSClassFromString(swift有命名空間)
performSelector
responseSelector
responsePotocol
動(dòng)態(tài)獲得命名空間
let ns = Bundle.main.infoDictionary?["CFBundleName"] as? String ?? ""
let clsName = ns + "." + "ViewController"
此方法可以放入NSBundle的extension中
extension Bundle {
//利用對(duì)象函數(shù) Bundle.main.nameSpace()
func nameSpace() ->String{
return infoDictionary?["CFBundleName"] as? String ?? ""
}
//計(jì)算型函數(shù),此次調(diào)用 Bundle.main.nameSpace
var nameSpace:String{
return infoDictionary?["CFBundleName"] as? String ?? ""
}
}
最后編輯于 :2019.12.24 16:01:22
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者 【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。 平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。