iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 2
0
自我挑戰組

Hello Swift系列 第 2

2/30 Optionals-2

  • 分享至 

  • xImage
  •  

(承1/30 Optionals-1)

How

每當存取一個Optional變數,Xcode會強迫執行確認此Optional是否有值,以避免程式出問題。

  • 強制解開 force-unwrap
    當你確認一個Optional一定有值,則可以在這個變數後面加上一個驚嘆號(!)
    ,意思是這個可選型別有值,可以安全地使用:
var programmingLanguage: String?
programmingLanguage = "swift"
print("I'm lerning " + programmingLanguage!)
//I'm learnign Swift

以下變數因尚未賦值,所以目前是nil,將會報錯:

var programmingLanguage: String?
print("I'm lerning " + programmingLanguage!)
  • 檢查Optional是否有值
    為了預防上述的錯誤,可以在取值前使用if敘述結合nil來判斷Optional變數是否有值,
    若有值則為安全的Optional變數,可以釋放出他的值做後續處理及使用:
var programmingLanguage: String? = "Swift"
if programmingLanguage != nil {
    programmingLanguage = "I'm learning " + programmingLanguage!
}

//I'm learnign Swift
  • Optional綁定 optional binding
    使用if let來確認Optional變數是否有值,若有則將這個值存入暫時的常數。
    可以新命名此暫時常數,也可以命名為與Optional變數相同的名稱,這個臨時常數或變數只能在其內部使用。
let programmingLanguage: String?
programmingLanguage = "String" or nil
if let programmingLanguageWithValue = programmingLanguage{
    var message = "I'm learning " + programmingLanguageWithValue
}else {
    var message = "What are you learning?"
}
//"String"有值:執行if let
//nil無值:執行else
  • 預設值
    可以使用??給無值的變數一個預設值:
var programmingLanguage: String? = "Swift"
var programmingLanguageWithValue = programmingLanguage ?? "Why not?"
//Swift
programmingLanguage = nil
programmingLanguageWithValue = programmingLanguage ?? "Why not?"
//why not?

上一篇
1/30 Optionals-1
下一篇
3/30 UI元件之View-1
系列文
Hello Swift30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言