Swift Day17 字面量、 模式匹配、 OC到Swift開篇

1. 補充: 如何獲取一個堆空間對象的地址指針?(多練習(xí),需牢記,拿到指針可以為所欲為
獲取堆空間對象的地址指針

一、字面量

1. 什么是字面量(Literal)? Swift 自帶的絕大部分類型,都支持直接通過字面量進(jìn)行初始化嗎?
字面量基本介紹
2. 思考:為什么 Swift 中自帶類型能夠通過字面量初始化
  • 因為他們遵守對應(yīng)的協(xié)議
字面量協(xié)議
3. 實踐:如何讓 Int 變量能夠使用字面量 true 來賦值表示 1?
  • Int 擴(kuò)展 ExpressibleByBooleanLiteral 協(xié)議的 init 方法
extension Int: ExpressibleByBooleanLiteral {
    public init(booleanLiteral value: BooleanLiteralType) { self = value ? 1 : 0 }
}
// 原本會報錯的代碼
var num: Int = true
print(num) // 1
4. 實踐:如何使用字面量初始化 Person 對象?
class Person: ExpressibleByIntegerLiteral {
    var age = 0
    init(age: Int) {
        self.age = age
    }
    required init(integerLiteral value: IntegerLiteralType) {
        age = value
    }
}

var person:Person = Person(age: 10)
print(person.age) // 10
// 用字面量初始化 Person
var person2:Person = 20
print(person2.age) // 20

二、模式匹配

1. 模式(Pattern)基本介紹
image.png
2. 通配符模式(Wildcard Pattern),包含兩種 __? 請問這兩種在模式中有什么不同?
  • _ 匹配任何值
  • _? 匹配非 nil 值
    image.png
3. 元組模式(Tuple Pattern)
image.png
4. 枚舉 case 模式(Enumeration Case Pattern)
image.png
  • 總結(jié):無論 if case 還是 for case,把它們想象成 witch case 來理解,就非常好理解。
5. is 和 as 在類型轉(zhuǎn)換模式(Type-Casting Pattern)的區(qū)別?
  • is 一般僅僅用于判斷類型
  • as 用于判斷類型 + 類型轉(zhuǎn)換
image.png
6. 什么是表達(dá)式模式(Expression Pattern)
image.png
7. 如何自定義表達(dá)式模式?
image.png
8. where 一般在 Swift 中運用,有 5 處,備用知識
image.png

三、OC 到 Swift

1. MARK、TODO、FIXME 用于干什么?
image.png
2. 條件編譯能判斷的一些條件?(了解)
image.png
3. 如何讓網(wǎng)絡(luò)請求在 debug 模式下測試服務(wù)器,在 release 模式下走正式服務(wù)器?
let baseHTTP: String

#if DEBUG
baseHTTP = "http://develop.com"
#else
baseHTTP = "http://product.com"
#endif

print(baseHTTP)
4. 在 Swift 中如何讓 Log 僅僅在 debug 模式下打印,在 release 模式下不打???
func log<T>(_ value: T){
    #if DEBUG
    print(value)
    #endif
}
  • 使用泛型,能打印任何類型
  • print(value) 只會在 debug 模式執(zhí)行
  • release 模式下 log(:) 不執(zhí)行任何代碼,會被編譯器優(yōu)化,直接不調(diào)用,所以不影響性能
5. 如何構(gòu)建一個打印方法,僅在 debug 模式打印,并且會打印出①函數(shù)所在文件位置②行數(shù)③方法名?
func log<T>(_ value: T,
            file: NSString = #file,
            line: Int = #line,
            function: String = #function){
    #if DEBUG
    print("file:\(file.lastPathComponent) line:\(line) function:\(function) log:\(value)")
    #endif
}
6. 系統(tǒng)版本檢查。(了解)
image.png
7. API 可用性說明
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容