讀書筆記-Swift-01Swift概述

開始

  • 典型的語句如下:
print("hello")
print("world")
  • 一行就是一個語句,換行是有意義的。
  • 也可以一行寫多個語句,不過要用分號分開。
  • 也可以在每行后面寫個分號,不過沒什么用,可以兼容C/OC的語言習慣
  • 一個語句可以拆分成多行,用于防止一行太長。但是要在一個合理的地方斷。比如括號的地方就是個好地方。
print(
      "world")
  • 雙反斜杠(//)表示注釋一行。和C、OC一樣。
  • (/* ... */) 可以注釋一段
  • 大括號一般會換行對齊。但是也有寫在一行的。語法上都可以。方便的話也可以寫在一行。
  • swift是編譯型語言。必須先編譯成機器語言。
  • swift編譯器非常嚴格。編譯器給的警告也應該重視。
  • swift給出的錯誤和警告,有的很重名,有的很垃圾(誤導)。有時候給的錯誤提示不在真正發生錯誤的地方。所以有個辦法就是把語句拆分成多行。這樣更容易定位哪行出錯了。

所有的東西都是對象?

  • swift中任何東西都是對象。粗略的規定,一個對象就是你可以對它發消息的東西。消息,就是一種必要的指令。這樣理解的話,任何東西都是對象。
  • swift中,發消息的語法是“點”(dot-notation)
fido.bark()
rover.sit()
  • 任何東西的意思就是說,語言原始的實體都能被發送消息。1看上去是基本數據類型,也是個對象,可以發消息,下面的是合法的。
let s = 1.description
  • 在swift中,最終檢測一個東西是不是對象的方法,就是看你是否能改變它。對象類型可以被擴展,意味著你可以對這個類型定義自己的方法。swift中的類型是可以擴展的。
  • 所以swift中沒有標量。所有的類型都是對象類型。

三種常用的對象類型

  • swift有三種常用的對象類型。classes,cstucts,enums
  • 三種類型的相似遠大于不同
  • struct,enum在oc和swift中是不同的。

變量

  • 變量就是對象的名字。你可以想象成放對象的鞋盒子。對象可能被更改,被替換,但是變量名是不會變的。
  • 變量需要先被聲明。let 申明常量。var聲明變量。聲明常常伴隨著初始化。
  • 雖然說var顯得靈活,但是知道不可改的時候,最好用let。首先能提高效率。
  • 變量有類型,類型在聲明的時候確定,不可修改。
  • 變量有生命周期。
  • 變量的類型約定大寫字母開頭。變量用小寫字母開頭。

函數

  • 可執行語句不是在任何地方都可以執行的。要在函數體里執行。函數就是一堆可執行語句。函數的調用又是一個執行語句,這樣又必須在某個地方調用。不用擔心最開始的函數是誰在調用,你在寫iOS的APP,系統就會有地方調用。
  • 函數有名字,在定義時確定。
  • swift有特別的規則,有個main.swift的文件,可以在最頂層執行。不在任何函數體里。可以用這個main文件,通常沒必要。

swift文件結構

  • swift中,文件是一個完整意義的單位。只有特定的東西才能在文件中。
    • 模塊導入語句
    • 變量聲明
    • 函數聲明
    • 對象類型聲明
  • 模塊是更上一層的單元。模塊可以包含很多文件,他們可以互相調用。但是如果不導入的話,是不能互相看見的。
  • 文件層級的變量聲明是全局變量。在文件級別的函數聲明是全局函數。
  • 文件級別里不能直接放可執行代碼。
  • 可執行代碼也不能放在類聲明的大括號內。這是類聲明的頂層。類聲明可以包含函數聲明。函數聲明可包含可執行代碼。

作用域和生命周期

  • 作用域是說這個東西可以被別人看到。嵌套在別的東西里面的東西,也是嵌套繼承作用域。可以看到自己的同級別和上一級別的東西。
  • 模塊范圍是個作用域。文件范圍是一個作用域。大括號是個作用域。
  • 作用域是共享信息的重要方式。
  • 東西都有生命周期。和作用域完全一致。聲明周期在作用域內。
  • 變量聲明,函數聲明,函數對象聲明可以在任何大括號內。

對象成員

  • 在對象類型中,(class,struct,enum)在頂層定義的東西有特殊的名字。大部分因為歷史原因。變量稱之為屬性;函數稱之為方法。
  • 所有頂層中的,稱之為對象的成員。成員都有特殊的簽名。

命名空間

  • 命名空間內部的東西不能被命名空間外部的東西直接訪問。除非明確指出命名空間的名字。這樣可以讓同樣的名字在不同的地方使用,而不會有沖突。
  • 命名空間本身不提供安全和隱私,只是提供方便。
  • 使用(.)點的方式來引用命名空間,其實和發消息是一個機制。發消息允許你看一個其他你不能看到的作用域。

模塊

  • 頂級的命名空間是模塊。默認情況下,你的app是個模塊因此也是個命名空間。
  • frameworks也是模塊,因此也是命名空間。
  • 引入模塊的時候,所有模塊中的頂級聲明都可以看到。
  • 不要在自己的模塊中定義和系統沖突的類。干不過他。
  • swift自己也是在模塊中定義的。稱之為swift模塊。通常隱含的導入了swift模塊。像print這樣的函數就是在這個模塊中。
  • swift模塊頂級中包含了全局函數,操作符比如+,內置類型比如Int,內置結構比如String。

實例

  • 對象類型有一個重要特性,可以被實例化。類定義只是說這類是什么樣子,要有具體的對象,要造一個。
  • 創建實例就類型加括號即可。
  • 方法分為實例方法和類方法。屬性也有類屬性和實例屬性。

為什么有實例

  • 對象類型本身是個對象。可以對他發消息。
  • 實例是類描述的反映,也是存儲的空間。
  • 實例不僅僅關乎屬性的值,也關乎屬性的生命周期。
  • 實例是數據和代碼的集合。代碼是從類的定義中來。數據是單獨的。

self

  • 實例是一個對象,是消息的接收者。因此需要有個辦法對自己發消息。于是就有了self。
  • self就代表本身這個對象。可以省略寫self。但是為了可讀性,一般不會省略。而且有的時候你必須寫self。

隱私

  • 命名空間不是訪問內部名字無敵的限制。但有些時候我們需要做些限制。

  • 好的面向對象的設計需要有隱私設計。需要有辦法讓別的類無法訪問無法看見不支持被看見的類的方法和屬性。

  • 聲明為private的就可以。

  • 一些保留字,private,class等,不能簡單的作為變量的命名。要強制的話,需要加反點引號引起來。

    class `func` {
        func `if`(){
          let `class` = 1
      }
    }
    
  • 對象的屬性和方法默認都是公有的。要搞成私有,用private

設計

  • 面向對象程序設計是一門藝術
  • 實際的開發過程中,很多類的設計都是Apple的。你不用去設計,只需要學習怎么用。
  • 面向對象的設計必須建立在靠譜的自然對象基礎上。然后是封裝合適的方法和數據。運行的時候實例化,有合適的生命周期,恰當的暴露。

對象類型和API

  • 程序常常有很少的全局函數和變量等。大部分是對象類型的定義,類定義之類的。這樣更好的組織你的代碼。
  • 小結下對象:
    • 封裝功能;
    • 維護數據
  • 類可以做什么,用API封裝。

實例創建,范圍和生命周期

  • swift中運行的通常是實例。要做事情先要對類進行實例化。默認情況下是沒有實例的。需要自己造。造完之后放到一個變量中,生命周期和作用域都和這個變量一致。
  • 實際的開發過程中,app有一些框架,啟動的時候就有一些實例。

小結和結論

  • 有類,有實例。
  • 對象是組織代碼的工具。
  • 有些經典的書可以繼續深入學習面向對象。重構;設計模式。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,238評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,430評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,134評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,893評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,653評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,136評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,212評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,372評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,888評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,738評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,482評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,179評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,588評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,829評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,610評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,916評論 2 372

推薦閱讀更多精彩內容