iT邦幫忙

DAY 4
1

Swift - 從菜菜鳥到菜鳥的 30 天系列 第 4

[Swift-d4] - Playground - Optional, ! And ?

  • 分享至 

  • xImage
  •  

小弟的規劃表 - http://blog.kerkerj.in/blog/2014/11/01/planning/
好讀版 - http://blog.kerkerj.in/blog/2014/10/04/swift-d4/

=

Playground - Optional, ! and ?

今天要來探討 Optional 型別,我認為這塊是初學 Swift 常遇到的問題
大家搞不懂 「!」 「?」 到底在幹什麼,所以今天就來瞭解一下

在 Swift 中,所有的資料型別都不能賦予 nil
也就是以下這件事是不成立的:

var x: String = "test"
x = nil

所以在 Swift 底下,就要使用 Optional 來處理值可能不存在的情況
當一個變數 x 被宣告成 Optional 型別時,該變數就會有兩個情況:

1. 有值,等於 x
2. 沒有值

要宣告一個變數可能為 nil 時的方式是使用問號 『?』:

// 此時 x = "yaya"
var x: String? = "yaya"

// 此時 x 沒有值
x = nil

拿以下程式在 Playground 執行看看:

var str: String = ""
println(str)
str = "yaya"
println(str)

var str2: String?
println(str2)
str2 = "yaya"
println(str2)

可以看一下 Playground 右邊的輸出框,觀察兩個 string 的差異
當 str2 被賦予 Optional 型別後,
str2 已經不是單純的 String 型別了,

那如何強制以 String 型別拿到 str2 的資料呢? 試著在 str2 後面加上驚嘆號,並觀察右方輸出結果:

println(str2!)

請注意!若要強制取值,一定要確保此 Optional 型別中一定有值, 否則將會導致執行錯誤,以下是錯誤範例:

var str2: String? = "yaya"
println(str2)
str2 = nil
println(str2!)

程式將會在第四行返回錯誤,因此使用驚嘆號強制取值前請先確保 Optional 裡有值。

在 Objective-C 中,nil 是指向一個不存在物件的指標; 而 Swift 中,nil 是一種非常明確地值 - 他就是代表「不存在」。

在 Playground 中多試試看囉~~

ps. Swift 的 ? 和 Ruby 的 ? 是完全不同意思的XD


上一篇
[Swift-d3] - Playground - 變數與常數, 註解, 基本資料型別
下一篇
[Swift-d5] - Playground - Array, Dictionary, Controll Flow
系列文
Swift - 從菜菜鳥到菜鳥的 30 天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
henryfan
iT邦新手 5 級 ‧ 2014-10-04 21:42:24

!和?真的困擾我很久
Swift 的這種特性真的很奇妙捏!

我要留言

立即登入留言