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)鍵詞,letvar,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
propertymethod
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. 因此、于是、今后、從今以后