Swift -Chapter 1

ground of being

  • 語句(statement):一句完整的swift命令是指令。

    • 一般一行一句,
    print("the architecture of swift")
    
    • 可以多條語句放在一行,但是需要添加";"進(jìn)行分隔。
    print("study");print("the architecture of swift")
    
    • 也可以一條語句放在多行,不過一定要在合適的位置(比如在括號(hào)后面)換行,否則會(huì)無法被識(shí)別
    print(
        "the architecture of swift")
    
  • 注釋(comments) :單行注釋:// 注釋的內(nèi)容 或 多行注釋: /* 注釋的內(nèi)容 */

  • 格式:{} 作為邊界,內(nèi)容縮進(jìn),swift 并不在乎我們的格式是什么樣的;

Everything is an Object?

  • 一切皆對象,是所有面向?qū)ο缶幊陶Z言的統(tǒng)一的話術(shù)。

  • 對象,我們可以向?qū)ο蟀l(fā)送消息;消息:是指命令式的指令。比如讓狗 bark、sit,這些指令就是消息,狗就是接收消息的對象。

  • swift 中發(fā)送消息的語法是 . 符號(hào),(如果需要換行的話,可以在 . 符合前)

  • 一切皆對象,在 swift 中,數(shù)字 1也可以接收消息,

        let s = 1.description
    
  • swift 中,每個(gè)名詞都是對象,每個(gè)動(dòng)詞都是消息。判斷是否是對象的終極標(biāo)準(zhǔn)是我們是否可以修改它。

  • 對象類型可以添加擴(kuò)展,也就意味著,我們可以給這個(gè)類型添加自定義的消息,比如,正常來說一個(gè)數(shù)字沒有say hello的能力,但我們可以添加擴(kuò)展,讓它有這個(gè)能力

         extension Int {
            func sayHello() {
                print("Hello, I'm \(self)")
            }
        }
        
        1.sayHello() // outputs: "Hello, I'm 1"
    

三種對象類型

  • 驚訝于 1 竟然是一個(gè)對象,但通過對OC的學(xué)習(xí),我們知道 1 不是一個(gè) class, 也不是某個(gè) class對應(yīng)的實(shí)例;實(shí)際上,1的類型是 Int,是一個(gè)結(jié)構(gòu)體(struct),除此之外,還有一個(gè)枚舉類型可以接收消息。
  • 總的說三種對象類型包括class(類) 、struct(結(jié)構(gòu)體)、enum(枚舉)

Variables

  • 變量是指對象的名字,更準(zhǔn)確的說,一個(gè)變量指向一個(gè)對象,是一個(gè)對象的引用。也可以非技術(shù)性的認(rèn)為它是一個(gè)放置對象的盒子。對象可能會(huì)被更改,或被另一個(gè)對象替換,

  • swift 中,一個(gè)變量不會(huì)隱性的被創(chuàng)建,所有的變量都必須被聲明,聲明變量可以使用兩個(gè)關(guān)鍵詞,let var , swift 中的聲明一般與初始化共同出現(xiàn),直接使用 = 給變量賦值, =swift 中不再是數(shù)學(xué)公式,而是賦值指令,代表取到等號(hào)右邊的值,用它替換等號(hào)左邊的值。

  • let 聲明的變量初始值無法被替換,它是一個(gè)常量 constant ;如果確定之后不會(huì)更改這個(gè)變量的值,建議使用let 進(jìn)行聲明,它不需要編譯,這也會(huì)使 swift 更高效

  • 變量是有類型的,當(dāng)變量被聲明的時(shí)候,變量的類型就確認(rèn)了,而且類型不可改變。下面的用法是不對的。

        var two = 2
        two = "hello" // compile error
    
    • two 被聲明后值是一個(gè)數(shù)字,類型是 Int,我們可能改它的值,設(shè)為 1,但不能設(shè)為 Hello, 因?yàn)?Hello是一個(gè)字符串,類型是String,String 不是 Int

Functions

  • 可執(zhí)行的語句(excutable code )不能隨便放,需要放在方法的body里面。

     func go() {
        let one = 1
         var two = 2
         two = one 
     }
    
    • 這是一組有序的代碼,被封裝在一個(gè)函數(shù)中,這個(gè)函數(shù)有聲明,但沒有執(zhí)行,需要有人調(diào)用這個(gè)函數(shù),里面的語句才能被執(zhí)行。
    func doGo() {
        go()
    }
    
    • 這是一個(gè)函數(shù)的調(diào)用,但可以發(fā)現(xiàn),doGo這個(gè)函數(shù)也只有聲明,沒有調(diào)用,如果希望我們自己寫的代碼可以被執(zhí)行到,就需要了解我們的終極目標(biāo)是寫一個(gè)iOS的應(yīng)用,將會(huì)運(yùn)行在iOS的機(jī)器上,運(yùn)行時(shí)將會(huì)調(diào)用指定的方法。所以我們要把特殊的函數(shù)寫在運(yùn)行時(shí)會(huì)調(diào)用的地方。

The Structure of a Swift File

  • 一個(gè)swift工程包含一個(gè)或多個(gè)文件,哪些代碼可以出現(xiàn)在文件中有明確(definite)的規(guī)定。只有幾個(gè)固定的代碼可以出現(xiàn)的文件的頂層,主要包括以下幾個(gè):
    • 模塊引入 (Module import statement
    • 變量聲明 (Variable declarations),在最頂層聲明的是全局變量
    • 函數(shù)聲明 (Function declarations
    • 對象類型聲明 (Object type declarations

Scope and Lifetime

  • swift 中的所有東西都有一個(gè)生效范圍,這樣決定了它是否可以被其他的代碼引用。
  • 當(dāng)一個(gè)變量或方法被聲明之后,它只能在它聲明的那個(gè)層級被訪問到,它可以訪問與它同級或在它上級的屬性或方法聲明。
  • 聲明的位置決定其生命周期的長短。

Object Members

  • property
  • method

Namespaces

class ViewController {
    
    class Manager {
        func doSomething() {
            print("do something");
        }
    }
}
  • Manager 而言,ViewController 就是它的命名空間,在命名空間內(nèi)可以直接訪問 Manager類,在命名空間外則必須先調(diào)用ViewController 才能訪問到 Manager,

    ViewController.Manager().doSomething()
    

Modules

  • 層級最高的命名空間就是模塊。我們的APP是一個(gè)模塊,因此也是一個(gè)命名空間,這個(gè)命名空間的名字就是我們APP的名字。假設(shè)我們的APP名字是 SwiftStudy,里面聲明一個(gè)ViewController的類,我們可以通過SwiftStudy.ViewController來訪問它,但因?yàn)槲覀円呀?jīng)在 SwiftStudy 這個(gè)命名空間下了,所以,我們可以直接訪問 ViewController。
  • 當(dāng)我們import 一個(gè) module 的時(shí)候,這個(gè)module里面的層級最高的聲明我們都可以直接使用。比如我們 import Foundation, 就可以直接使用 NSString這個(gè)類。當(dāng)然,如果我們傻傻的聲明了一個(gè)我們自己的NSString的類的話就需要使用Foundation.NSString來訪問 Foundation 這個(gè) module 里面的NSSting 類型了,否則 Swift將無法區(qū)分你要調(diào)用的到底是哪個(gè)Module里的NSSting。
  • Swift 本身也是被聲明在一個(gè) module里的,叫做 Swift module。但是我們不需要主動(dòng)import它,因?yàn)槲覀兊拇a已經(jīng)隱性的 import 過這個(gè)module,當(dāng)然 我們也可以顯性的 import Swift,但是沒必要。
  • 這個(gè)隱性的import可以解釋一個(gè)較為神奇的現(xiàn)象:print 函數(shù)是哪里來的?為什么我們可以使用這個(gè)不屬于任何對象的方法?實(shí)際上 print 是一個(gè)被聲明在 Swift Module 最高層級的函數(shù),而我們的代碼又可以使用Swift module 聲明在最高層級的方法和變量,所以我們可以直接使用 print函數(shù)
  • 我們可以看到 Swift Module 最高層級都聲明了些什么,Control + Command + click print 函數(shù),就可以打開對應(yīng)的文件,里面可以看到包括 print在內(nèi)的方法聲明

Instances

Eng

  • scope 范圍
  • boast 夸 ; a boast common 自夸 自述
  • stipulate 規(guī)定
  • parentheses n. 括弧
  • primitive adj. 原始的 n. 原始人、原函數(shù)
  • linguistic adj. 語言學(xué)
  • syntactic adj. 句法的
  • trickery n. 詭計(jì)、權(quán)謀、騙局
  • ultimate n. adj. 最終 終極 最后
  • scalar n. adj. 標(biāo)量
  • Flavors n. 風(fēng)味、風(fēng)格
  • object-oriented 面向?qū)ο?/li>
  • notion n. 概念
  • Technically adv. 技術(shù)性的
  • undergo v. 經(jīng)歷、經(jīng)受、遭受
  • integrity n. 正直、完整、誠實(shí)
  • implicitly adv. 蘊(yùn)含的 不明顯的 含蓄地
  • existence n.存在
  • declared adj. 聲明的 宣告的
  • declare v. 聲明 宣告
  • accompanied 伴隨
  • merely adv. 僅僅 只是
  • assignment n. 賦值 分配 指派 任務(wù)
  • algebraic adj. 代數(shù)的
  • formula n. 公式、式、式子、方案、配方
  • permit 允許、使
  • literally adv. 從字面上看
  • letter n. 信 字母
  • capital n.資本、首都、大寫 adj. 資本的 首都的
  • violate v.違反、侵犯、觸犯、違背
  • Thus adv. 從而、因而、因此
  • a batch of 一批
  • delimited 定界的
  • nutty adj 堅(jiān)果的 瘋狂的
  • regression n. 還原 回歸
  • recurse v. 遞歸
  • infinite adj. 無限的 無窮的 廣大無邊的
  • definite adj. 定、確定的、確切的
  • impetus n. 推動(dòng)力、促進(jìn)、勢頭、原動(dòng)力
  • demonstrate v. 演示
  • constitute v.構(gòu)成、組成
  • legal adj. 合法的、法定的、法律的
  • significance n. 意義、重要性
  • In effect adv. 實(shí)際上
  • hence adv. 因此、于是、今后、從今以后
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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