Swift入門三(知識(shí)點(diǎn))

可選項(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 ?? ""
  }

}

最后編輯于
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容