三.可選項 optional
1. optional
1.1optional 可選值
1
.optional是 swift 的一大特色,也是 swift 初學者最容易困惑的問題
2.定義變數時,如果指定是可選的
, 可選項有可能有值
,有可能沒值;有
2種可能需要我們程式設計師自己去判斷一下
3. 定義
變數或者常量
指定型別後加乙個
?,表示該變數是可選的
4. 可選項沒有賦值
,預設是乙個
nil
5.常量可選項需要設定乙個初始值,主要用於在建構函式中
//: num 可以是乙個整數,也可以是 nil,注意如果為 nil,不能參與計算
var
num:
int ? =
10
6. 可選項不能直接運算
可選項如果需要運算的話
,需要強制解包
.強制解包就是在可選項後邊加入乙個
!.強制解包是程式設計師自己加的
,自己加的自己負責.
注意:必須要確保解包後的值不是 nil,否則會報錯
//: num 可以是乙個整數,也可以是 nil,注意如果為 nil,不能參與計算
var num: int? = 10
//: 如果 num 為 nil,使用 `!` 強行解包會報錯
var r1 = num! + 100
翻譯在[解包]乙個可選值時發現 nil
1.3 ??
運算子
1.??
運算子可以用於判斷變數/常量
的數值是否是nil
,
2.在使用 swift 開發時,??
能夠簡化**的編寫
var num: int? = 10
let r1 = (num ?? 0) + 10print
(r1)
2.控制流
2.1 if
let num = 200
if num < 10 else
if num > 100 else
var a = 10
var b = 20
letc = a > b ? a : b
print(c)
適當地運用三目,能夠讓**寫得更加簡潔
2.3可選項判斷:
1.if 2. if let 3. guard 4.??
單個可選項判斷
leturl =
nsurl
(string:
"" )
//: 方法1: 強行解包 - 缺陷,如果 url 為空,執行時會崩潰
let request = nsurlrequest(url: url!)
//: 方法2: 首先判斷 - **中仍然需要使用 `!` 強行解包
if url != nil
//: 方法3: 使用 `if let`,這種方式,表明一旦進入 if 分支,u 就不在是可選項
可選項條件判斷
//: 1> 初學 swift 一不小心就會讓 if 的巢狀層次很深,讓**變得很醜陋
printiflet u = url
}//: 2> 使用 where 關鍵字,
多個可選項判斷
//: 3> 可以使用 `,` 同時判斷多個可選項是否為空
let oname: string? = "張三"
let ono: int? = 100
iflet name = oname }if
let name = oname, let no = ono
guard
1.guard
是swift 2.0
之後推出的
2. guard
與if let
相反
3. guard 的語法
guard let
新的變數名
=可選項
else
letoname:
string
? =
"張三"
let onum: int? = 18
guard let name = oname else
guard let num = onum else
// **執行至此,name & num 都是有值的
print(name)
(num)
2.4switch
let score =
"優"
switch score
socket可選項程式設計
套接字有多種可選項,有時候是需要更改套接字可選項的,下面是一部分套接字可選項 套接字可選項是分層的。ipproto ip層可選項是ip協議相關事項,ipproto tcp層可選項是tcp協議相關事項,sol socket層是套接字相關的通用可選項。下面是讀取和設定可選項的函式 includeint ...
網路程式設計筆記 套接字可選項
套接字具體多種特性,可通過可選項更改。1 套接字可選項和i o緩衝大小 sol locket層是套接字相關的通用可選項 ipproto ip層可選項是ip協議相關事項 ipproto tcp層可選項是tcp協議相關事項 可選項的讀取和設定通過如下兩個函式完成 include intgetsockop...
第十三週可選專案 鍊錶類
動態鍊錶也是程式設計中的一種非常有用的資料結構。可以說,是否能夠理解有關操作的原理,決定了你是否有資格稱為 科班 出身。在後續的專業基礎課中,相關的內容還會從不同的角度,反覆地認識,反覆地實踐。不過,在現階段多些體驗,也是很有必要的了。1 閱讀下面的程式,回顧一下動態鍊錶,閱讀程式過程中,請用筆畫一...