站在彙編角度深入瞭解 Swift(一)

小星星_ios發表於2020-04-03

API & ABI

  • API(Application Programming Interface): 應用程式程式設計介面

    • 原始碼與庫之間的介面
  • ABI(Application Binary Interface): 應用程式二進位制介面

    • 應用程式與作業系統之間的底層介面
    • 涉及的內容有:目標內容格式、資料型別的大小、佈局、對齊,函式呼叫約定等等

swiftc

  • swiftc 存放在 Xcode 內部
Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
複製程式碼
  • 一些操作
    • 生成語法樹
    swiftc -dump-ast main.swift
    複製程式碼
    • 生成最簡潔的 SIL 程式碼
    swiftc -emit-sil main.swift
    複製程式碼
    • 生成 LLVM IR 程式碼
    swiftc -emit-ir main.swift -o main.ll
    複製程式碼
    • 生成彙編程式碼
    swiftc -emit-assembly main.swift -o main.s
    複製程式碼

常量

  • 只能賦值一次
  • 不要求在編譯器確定,但使用之前必須賦值一次
  • 常量、變數在初始化之前都不能使用,這個在 OC 中是可以的
let a = 10
let b: Int
func B() -> Int {
    return 20
}
b = B()
複製程式碼

識別符號

  • 不能以數字開頭,不能包含空白字元、製表符、箭頭等特殊字元
  • 除上述所說,幾乎可以使用任何字元
let ?? = "NB"
...
複製程式碼

常見的資料型別

思考:為什麼在 swift 中連類似Int這種基本資料結構都設計成結構體?這樣甚至可以給其新增一些方法,使我們的程式碼更具可以性和擴充套件性。 這樣就可以給整形

  • 值型別
    • 列舉(enum): Optional
    • 結構體(struct): Bool、Int、Float、Double、Character、String、Arrary、Dictionary、Set
  • 引用型別
    • 類(class)

字面量

就是像字串、數字...這種

let a = 1 + 2
...
複製程式碼

元組

思考:這個資料結構是什麼樣的?

Swift 裡面 Void 就表示一個空的元組
public typealias Void = ()

let error = (404, "Not Found")
error.0
error.1
複製程式碼

相關文章