//
// main.swift
// swift09
//// created by ios on 2018/9/29.
//import foundation
// swift學習筆記9
/* optional:可選型別 ?
可選型別是swift特色之一,也是很多初學者不適應的原因之一。
optional體現了swift對型別的安全性考慮。
特點:1.只有optional型別才能作為空值(nil),這一點在引數中使用的非常多;
2.swift中任何型別都能作為optional型別,甚至是元組!
3.optional提供了一種非常簡潔的表達可選執行表示式的方式。
什麼時候使用?
當我們宣告乙個物件而無法確定其當前的值,這個時候就可以先將它宣告成乙個可選型別。
*/// 1. 基本使用
do
s = "hello"
let c = int?(100)
let arr: [int?]? = [1, 2, 3, 4, c]
let tuple: (int?, float?, string?)? = (a, f, s)
if let arr = arr
if let t = tuple
/*列印:
arr = [optional(1), optional(2), optional(3), optional(4), optional(100)]
tuple = (optional(100), nil, optional("hello"))
*/}/*
我們還可以使用 optional《型別》來宣告可選型別
*/do
print("c = \(c)")
/*注意,平時使用的時候還是使用 ?宣告可選型別多一些,因為很方便啊。
*/}print("\n")
// 2. optional 鏈
do print("\n")
//3. optional的強制拆解 !
/* 注意:這一功能還是謹慎使用,一旦被被強制拆解的可選型別為nil,那麼程式就是崩潰。。。
什麼是強制拆解?
強制拆解是和可選型別一起使用的,當我們確定乙個可選型別不為nil了,我就可以把這個可選型別強制拆解成
乙個普通的型別。
用法:在可選型別的資料後面加上感嘆號 !
*/do
print("\n")
// 4. optional繫結
/* 上面我們介紹了強制解包的方式把乙個可選型別變成乙個正常的型別,但是我們也說了這種方式是不夠安全的。
我們還有更加安全的解包的方式,就是 可選繫結 和 空結合操作符(??)
語法形勢:
if let obj = 可選型別
*/do
a? = 100
if let c = a
let x: int? = 10
var y: int? = nil
/*我們可以在if宣告中使用多個繫結區域性變數,這個時候,每個可選繫結都要用let 或 var 引出。
此時,多個宣告之間的關係是「並且」,有乙個為假,則if語句塊不執行。
*/if let x = x, let y = y else
y = 20
if let x = x, var y = y else
}語句/* guard,顧名思義,就是守衛的意思。
它也是swift語言中的新的語法,是乙個很好用的語法,使用也和廣泛。
作用:也是用於optional繫結的。
*/do
// 注意,這裡可以使用b
print("--------\(b)")
}test()}/*
注意:guard 與 if 很相似,都可以作為條件語句,對條件表示式進行判斷。但是,不同點是,if語句中宣告的
常量或者變數的作用域是if語句塊內部,而guard語句則是guard語句以下的部分都可以使用它宣告的常量
或者變數,這在實際應用的時候是很方便的。
*///6. 空結合操作符 (??)
/* 什麼是 空結合操作符?
這又是一種輕量便捷的拆解optional物件的方式。
*/do
// 7. 隱式拆解的optional型別
/* 隱世拆解的optional型別的表示與optional類似,就是在型別名後緊跟 !。
比如 int!, float!, string! 等等。
它表示當前物件作為乙個optional型別,不過使用此物件時,它已經被斷言確保不為空了。
*/print("\n")
do
// 這裡可直接對ref做函式呼叫,
// 無需使用optional-chaining操作符
ref()
// 這裡宣告了乙個string型別的
// 隱式拆解的optional常量s
let s: string! = "abcd"
// 這裡可直接對s使用成員訪問操作符,
// 而不需要新增optional-chaining操作符,
// c的型別為int
let c = s.count
// 輸出:c = 4
print("c = \(c)")
// 如果我們使用了optional-chaining操作符 ?
// 那麼整個表示式就變成了optional-chaining表示式了,
// 這裡count的型別就變為了 int?
let count = s?.count
// 輸出:count = optional(4)
print("count = \(string(describing: count))")
// 這裡請各位務必注意!
// 由於之前已經提到了,
// 當它作為右值表示式時,其型別會被隱式轉為optional。
// 所以這裡的option的型別為 string? ,而不是 string!
let option = optional("abc")
// 這句沒有問題
_ = option?.count
}
swift4 1 系統學習一
swift學習筆記1 簡介swift出現的目的 為了簡化macos和ios開發 特點 1.開源 2.跨平台 3.物件導向的程式語言 4.程式設計正規化豐富 面向過程,物件導向,函式式程式設計 5.安全性 swift學習筆記2 基本型別體系 1.列舉 enum 2.結構體 struct 3.類 cla...
swift4 1 系統學習十三 結構體 一
結構體大部分語言中都會有結構體。swift中的結構體屬於四大基本型別 函式 列舉 結構體 類 之一,他屬於值型別。標準庫中的很多態別都是結構體型別,像int float string array。swift中的結構體還有很多靈活的語法特性 可定義儲存式例項與型別屬性 可定義計算式例項與型別屬性 可使...
Swift 系統學習 06 迴圈語句
playground noun a place where people can play import uikit 本節主要內容 1.迴圈語句 for index in 0.10 需求 計算2的10次方 var result 1 var basevalue 2 下劃線 是忽略迴圈次數 忽略區間運算...