乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Swift 進階(一)基礎語法

       新進小設計 2022-10-28 發(fā)布于北京

      Swift簡介

      在學習Swift之前,我們先來了解下什么是Swift

      Swift是Apple在2014年6月WWDC發(fā)布的全新編程語言,中文名和LOGO是”雨燕“

      Swift之父是Chris Lattner,也是Clang編譯器的作者,LLVM項目的主要發(fā)起人

      Swift版本

      Swift歷時七年,從Swift 1.*更新到Swift 5.*,經(jīng)歷了多次重大改變,ABI終于穩(wěn)定

      API(Application Programming Interface):應用程序編程接口

      • 源代碼和庫之間的接口

      ABI(Application Binary Interface):應用程序二進制接口

      • 應用程序和操作系統(tǒng)之間的底層接口
      • 涉及的內(nèi)容有:目標文件格式、數(shù)據(jù)類型的大小/布局/對齊,函數(shù)調(diào)用約定等

      Swift是完全開源的,下載地址:https://github.com/apple/swift

      Swift編譯原理

      LLVM編譯器

      LLVM編譯器一般分為前端和后端

      • 前端:主要進行詞法分析,生成語法樹
      • 后端:生成對應平臺的二進制代碼

      編譯流程

      我們知道OC的前端是通過Clang進行編譯的,Swift的前端是通過swiftc來編譯的

      不同語言的前端可能不同,但最終都會通過編譯器的后端生成對應平臺的二進制代碼

      -w727

      整個編譯流程如下圖所示

      -w525

      • Swift Code:我們編寫的Swift代碼
      • Swift AST:Swift語法樹
      • Raw Swift IL:Swift特有的中間代碼
      • Canonical Swift IL:更簡潔的Swift特有的中間代碼
      • LLVM IR:LLVM的中間代碼
      • Assembly:匯編代碼
      • Executable:二進制代碼

      關于Swift編譯流程的詳細講解可以參考以下網(wǎng)址:https:///swift-compiler/#compiler-architecture

      swiftc

      我們打開終端,輸入swiftc -help,會打印出相關指令,這也說明了swiftc已經(jīng)存在于Xcode中

      -w890

      我們可以在應用程序中找到Xcode,然后右鍵顯示包內(nèi)容,通過該路徑找到swiftc

      路徑:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

      -w1175
      -w788

      swiftc的基本操作演練

      下面我們可以通過一些swiftc的一些基本操作來了解

      1.我們先新建一個Swift的命令行項目

      -w1399
      -w1076

      2.然后打開終端,cdmain.swift路徑

      -w890

      3.然后我們輸入swiftc -dump-ast main.swift,來查看下生成的語法樹

      -w890

      4.我們還可以輸入swiftc -emit-sil main.swift生成最簡潔的SIL代碼

      -w890

      5.我們還可以輸入swiftc -emit-ir main.swift生成LLVM IR中間代碼

      -w890

      6.我們還可以輸入swiftc -emit-assembly main.swift生成匯編代碼

      -w890

      Swift基礎語法

      Swift中打印輸入:print("Hello World")

      Swift中一句代碼是可以省略分號的,但是如果多句代碼寫在一行,需要用分號隔開

      Swift不用編寫main函數(shù),會以全局范圍內(nèi)的首句可執(zhí)行代碼作為入口來執(zhí)行

      通過反匯編我們可以看到底層會執(zhí)行main函數(shù)

      -w1084

      常量和變量

      常量:

      1.用let定義常量,常量只能賦值一次

      不用特意指明類型,編譯器會自動進行推斷

      let a: Int = 10
      let b = 20
      

      2.它的值不要求在編譯過程中確定,但使用之前必須賦值一次

      這樣寫確定了a的類型,之后再去賦值,也不會報錯

      let a: Int
      a = 10
      

      用函數(shù)給常量賦值也可以,函數(shù)是在運行時才會確定值的,所以只要保證使用之前賦值了就行

      func getNumber() -> Int {
          return 10
      }
      
      let a: Int
      a = getNumber()
      

      如果沒有給a確定類型,也沒有一開始定義的時候賦值,就會像下面這樣報錯

      -w643

      變量:

      1.用var定義變量

      var b = 20
      b = 30
      

      2.常量、變量在初始化之前,都不能使用

      -w644

      注釋

      1.Swift中有單行注釋和多行注釋

      注釋之間嵌套也沒有問題

      // 單行注釋
      
      /*
       多行注釋
       /*
       多行注釋
       */
       
       /*
       // 注釋嵌套
       */
      

      2.Playground里的注釋支持Markup語法(同Markdown)

      Markup語法只在Playground里有效,在項目中無效

      //: # 一級標題
      
      /*:
       ## 基礎語法
       */
      

      可以通過Editor -> Show Raw Markup來預覽

      -w299

      預覽的效果如下

      -w369

      標識符

      1.標識符(比如常量名、變量名、函數(shù)名)幾乎可以使用任何字符

      let

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多