iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 11
1
Mobile Development

iOS App初心者的30天試鍊系列 第 11

Day11:今天來談一下使用Swift時變數及常數會遇到的Optional問題

  • 分享至 

  • xImage
  •  

在我們寫程式時 , 你會發現在某些情況下 , 變數及常數有時是不會有初始值的狀態 ,

比如說我們去釣魚時宣告變數SamGetFish儲存Sam去釣魚的數目

var SamGeFish = 5

但Sam有可能要去釣魚時 , 剛好碰到氣候不佳 , 而取消行程 , 這跟釣到0條魚是不一樣的 ,

那要儲存什麼樣的內容才能表示氣候不佳而取消行程呢 ? 應該不會是0 , 釣到0條魚跟

取消行程是不一樣的 , 我們希望在程式裡判斷是否取消行程。

也許儲存-1是個不錯的方式,畢竟不可能有人會釣-1條魚。將SamGetFish的內容預設

為-1,待Sam釣完魚後,再改為他實際釣到的數目。如此我們即可透過比對分數是否

等於-1,判斷Sam是否有釣到魚。

var SamGeFish = -1

但這種做法其實有很大的問題:

1.容易誤解。

-1本身是個真實存在的數字,我們以它表達還沒有釣魚數目的狀態其實不太合理。

閱讀程式碼時,它不只無法直覺傳達出Sam還沒有去釣魚,甚至有可能讓人誤會。

2.修改容易出問題。

當我們想要採用另一個數字表示沒有分數的狀態,比方-2,此時必須十分仔細地檢查

程式碼,確保所有比對SamGetFish的地方都換成跟-2比較,只要稍有遺漏即會產生

錯誤的結果。

Optional 變數(常數)的宣告

剛才的問題,變數(常數)無法表達沒有內容的狀態。在Swift推出了optional,這問題

總算有解,Optional 的中文意思是「非必要的,可選擇的」,而在 Swift 程式裡,

所有宣告的變數(常數),不管型別是什麼,都可以幫忙増加optional的屬性,

使其成為一個可以有值,也可以無值的特別變數(常數)。

一個 optional 的變數(常數),可以被設定為 nil,表示它處於無值的狀態

var samGetFish:Int?

有了 optional 表達無值的狀態後,以後只有nil才代表沒有內容。數字 0 和空字串 “”

都還是有內容,跟 nil是不一樣的。

學會 optional 後,未來我們在宣告變數(常數)時,應當在宣告時就想清楚,思考它是否

可能無值,是否需要設為 optional。

檢查Optional 變數(常數)是否有值

如果想預防因為從無值的 optional 變數(常數)強迫取值造成的閃退,只要在取值前先用

if 判斷它是否不等於 nil。若是不等於 nil,即表示目前有值,才可放心地取值。

var samGetFish:Int? = 5
if samGetFish != nil {
    samGetFish = samGetFish!
}

上一篇
Day10:今天繼續來談一下如何使用 iOS 12 SDK--Part2
下一篇
Day12:利用UIImageView中的mask 設計有趣的圖片
系列文
iOS App初心者的30天試鍊31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言