//
// 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
}
}