Swift中可選項的總結


//
//  ViewController.swift
//  懶加載
//
//  Created by huang on 2016/10/7.
//  Copyright © 2016年 BBC6BAE9. All rights reserved.
//

import UIKit

class ViewController: UIViewController {
    
    //只是定義,並沒有分配空間
    var label: CustomLabel?
    /*
     可選項:
     目的:解決有和無的問題
     定義:只能用?表示變量爲nil,或者有一個值
     解包:(1)強行解包:目的是參與計算,但是存在風險,最好判斷是否爲nil,可以用 guard let/if let
          (2)可選解包:不能參與計算主要用於調用方法,如果對象存在就掉用方法,如果對象不再就什麼事情也不做。
     類型轉換:(1)as?前面的結果是可選的
             (2)as!前面結果一定有值
             (3)as 前面的結果是可選的 NSString-->[]
                                    NSArray-->[]
                                    NSDictionary-->[]
     (原因:使用太頻繁,swift在底層做了橋接)
     什麼時候需要進行類型轉換呢?
     答:將父類轉換爲子類的時候,因爲子類的方法和屬性比父類多,轉換有風險,如果沒有對應的方法可能會崩潰
     
     */
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupUI()
    }

    private func setupUI(){
    //創建控件
    label = CustomLabel()
    
        //添加到視圖
        //!--解包,爲了參與計算,addsubview用的是subviews數組記錄控件,數組中不允許插入nil
        //?--可選解包,調用方法,如果爲nil,不調用方法,但是不參與計算
        view.addSubview(label!)
        
        label?.text = "Hello"
        label?.sizeToFit()
        label?.center = view.center
        
    }
    
 
}




也可以這樣寫

import UIKit

class ViewController: UIViewController {
    //初始化並且分配空間Label
    var label = CustomLabel()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupUI()
    }

    private func setupUI(){
    //創建控件
    
        view.addSubview(label)
        
        label.text = "Hello"
        label.sizeToFit()
        label.center = view.center
        
    }
    
 
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章