Swift的語(yǔ)法

1.新增可選項(xiàng)
Optional 可選項(xiàng) 成為可選值 修飾符 ‘?’
- 概念 如果我們定義的常量或者變量 他可能有值 也可能為nil 我們就需要把該常量或者變量定義為optional
- 當(dāng)程序員輸入可選項(xiàng)的時(shí)候 系統(tǒng)會(huì)加上Optional 告知程序員你當(dāng)前打印的常量或者變量為可選項(xiàng)
- 可選項(xiàng)不能直接參與運(yùn)算
- 解決方法
- 01 使用‘!’ 強(qiáng)行解包(程序員向系統(tǒng)保證我的可選項(xiàng)一定有值 肯定不為nil)
fatal error: unexpectedly found nil while unwrapping an Optional value
- 缺點(diǎn): 如果我們對(duì)一個(gè)可選項(xiàng)進(jìn)行解包的時(shí)候如果該可選項(xiàng)為nil 的 會(huì)造成程序崩潰
- 02 使用‘??’ 運(yùn)算符
- 可選項(xiàng) 格式 let 或者 var 常量或者變量名: 數(shù)據(jù)類(lèi)型?
- 使用場(chǎng)景舉例
- sex 男 0 女 1 人妖 nil 泰國(guó)
- sex 男 0 女 1 太監(jiān) nil 清朝
- 開(kāi)發(fā)中
-后臺(tái) 頭像 url 第一次登陸 nil 如果不為nil

2.if語(yǔ)句相比于oc,可以省略()小括號(hào),可是不可以省略大括弧,而且也沒(méi)有oc中非零即真的概念,只有ture和flase

    func demo1(){
        let a:Int? = 20
       //這里可以省去小括號(hào)
        if a > 5 {
            print(a)
        }
    }

3.可選項(xiàng)判斷

  • 可選項(xiàng)判斷 if-let 和 if-var
  • 使用if-let 或者 if-var 對(duì)可選項(xiàng)進(jìn)行判斷 如果他不為nil 程序員自己定義一個(gè)常量或者變量記錄他 然后在 我們當(dāng)前的if-let 或者if-var 的{} 作用于中直接使用我們自己定義好的常量或者變量
    func demo1(){
        
        let url = NSURL(string: "http://www.baidu.com")
        if let _ = url{
           let request = NSURLRequest(URL: url!)
            print(request)
        } 

4.guard
-可選項(xiàng)判斷 使用 guard 英文 守護(hù)

  • 守護(hù)程序員定義好的常量或者變量 是否有值 如果為nil 的 完成return
    - 判斷與if let 相反
    - guard 配合 else 使用 還有 return
    - 與if-let比較少了一層代碼嵌套
    func demo(){
        let url = NSURL(string: "http://www.baidu.com")
        
        guard let a = url else{
            
            return
        }
        let request = NSURLRequest(URL: a)
        print(request)

    }

5.函數(shù)的定義

    // 定義一個(gè)有參數(shù)沒(méi)有返回值的函數(shù)
    
    func demo2(num1 a:Int ,num2 b:Int)->Void{
        
        print(a + b)
    }
    
    // 定義一個(gè)有參數(shù)有返回值的函數(shù)
    func demo1(num1 a:Int , num2 b: Int)->Int{
        
        return a+b
    }
    
    //定義一個(gè)沒(méi)有參數(shù)沒(méi)有返回值的函數(shù)
    func demo()->Void{
        
    }
6.閉包

1.閉包的定義
- 概念
- Swift中的閉包與OC中block 相似
- 閉包是一個(gè)代碼塊 在我們需要的時(shí)候執(zhí)行
- 閉包可以作為參數(shù) 還可以作為返回值
- 閉包中使用‘self’ 注意循環(huán)引用

    //定義一個(gè)有參數(shù)有返回值的閉包函數(shù),用"in"
    func demo3 (){
        
        let closure = {(a:Int , b:Int) -> Int in
            
            return (a + b)
        }
        print(closure(5,5))
    }

    //定義一個(gè)有參數(shù)有返回值的閉包函數(shù)
    
    func sum (a :Int,b: Int)->Int{
        
        return (a + b)
    }
    //定義一個(gè)有參數(shù)無(wú)返回值的閉包
    func demo1(){
        
        func sum(a: Int , b : Int){
            
            print(a + b)
        }
        sum(10, b: 10)
    }
    // 定義一個(gè)沒(méi)有參數(shù)沒(méi)有返回值的閉包
    func demo(){
        let closure = {
            
            print("哈哈")
        }
        closure()
    }
}


2.閉包的演練

    override func viewDidLoad() {
        super.viewDidLoad()
        demo { (result) -> () in
            print(result)
        }
        
    }
    
    func demo(callback:(result:String)->Void){
        dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
            
            NSThread.sleepForTimeInterval(2)
            let str = "返回?cái)?shù)據(jù)"
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                
                callback(result : str)
            })

            
        }
        
        
    }


3.閉包的循環(huán)引用
和oc的block循環(huán)引用的解決方式大抵相同

    override func viewDidLoad() {
        super.viewDidLoad()
        
        weak var weakSelf = self
        closure = {()->() in
            print(weakSelf?.view)
            
        }
    }
    
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        closure?()
    }
    deinit{
        print("沒(méi)了")
        
    }
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末照卦,一起剝皮案震驚了整個(gè)濱河市箫柳,隨后出現(xiàn)的幾起案子财著,更是在濱河造成了極大的恐慌火本,老刑警劉巖窟感,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異乳愉,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)屯远,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)蔓姚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人慨丐,你說(shuō)我怎么就攤上這事坡脐。” “怎么了房揭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵备闲,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我捅暴,道長(zhǎng)恬砂,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任蓬痒,我火速辦了婚禮泻骤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘梧奢。我一直安慰自己狱掂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布粹断。 她就那樣靜靜地躺著符欠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瓶埋。 梳的紋絲不亂的頭發(fā)上希柿,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天诊沪,我揣著相機(jī)與錄音,去河邊找鬼曾撤。 笑死端姚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挤悉。 我是一名探鬼主播渐裸,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼装悲!你這毒婦竟也來(lái)了昏鹃?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤诀诊,失蹤者是張志新(化名)和其女友劉穎洞渤,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體属瓣,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡载迄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抡蛙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片护昧。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖粗截,靈堂內(nèi)的尸體忽然破棺而出惋耙,到底是詐尸還是另有隱情,我是刑警寧澤慈格,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布怠晴,位于F島的核電站,受9級(jí)特大地震影響浴捆,放射性物質(zhì)發(fā)生泄漏蒜田。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一选泻、第九天 我趴在偏房一處隱蔽的房頂上張望冲粤。 院中可真熱鬧,春花似錦页眯、人聲如沸梯捕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)傀顾。三九已至,卻和暖如春碌奉,著一層夾襖步出監(jiān)牢的瞬間短曾,已是汗流浹背寒砖。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嫉拐,地道東北人哩都。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像婉徘,于是被迫代替她去往敵國(guó)和親漠嵌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容