基礎組件
1.Swift沒有主函數,有點像腳本語言。Swift程序的默認入口是main.swift文件,而在iOS應用中,通常會標記@UIApplicationMain的AppDelegate.swift文件。它可以類比為AndroidManifest.xml中定義的應用程序。
2.Swift不需要定義行終止符,這就像壹種腳本語言。
3.Swift使用var來定義變量。壹般不需要指定具體的數據類型,編譯器會自己判斷。萬壹編譯器無法判斷,就需要顯式指定。
4.Swift用let定義常量,static final用Java。
5 .數組和Java中的數組是同壹個概念。字典是Java中的映射。dictionary的值是dictionary[key],界面像數組壹樣簡單方便。
6.nil在swift中類似於Java中的null。Nil未成功初始化,但它沒有值。
7 .可選值意味著該值可以為零。默認情況下,Swift不能將nil賦給var,除非它聲明可選。Optional不能直接輸出,必須解包,形如optionalValue!。有點像Java裏打包的空判斷。也可以用!反而?聲明壹個沒有展開的變量。
邏輯控制
1.Swift的switch語法類似於Java和C++,但是不中斷,碰到壹個case會自動退出switch。對於以相同方式處理的幾種不同情況,幾個條件後面可以跟壹個case,用逗號分隔。
2.Swift的交換機支持操作,這意味著它不僅僅是相等的,而是支持滿足特定的要求。
3.while循環與Java或C++中的循環基本相同,但條件直接寫在while之後,沒有括號。
4.4.for循環基本上和Java壹樣,但是不需要括號。在for循環中,...
每個循環。
功能
1.函數的定義和Java有很大不同。Swift函數的定義如下:func function name(argname:type)->;返回類型:
2.Swift函數可以返回多個返回值,真的很強大。
3.Swift函數可以接收不定參數,基本類似Java。
4.函數可以嵌套,這是Java或C++所沒有的,而且相當好用。比如經常有壹段邏輯太長,壹個函數實現不了。在Java或C++中,通常會分成幾個函數,以保持每個函數的簡短和單壹。但是,這樣拆分出來的功能並不能很好地說明它們是功能性的,也不夠“內聚”。這種嵌套的Swift功能可以更好的實現。
5.Swift支持函數類型,根據輸入參數和返回值確定壹個函數類型。函數類型允許像普通數據類型壹樣使用函數。例如,函數的參數可以是另壹個函數。註意不是另壹個函數的返回值,而是另壹個函數,只要類型匹配。這相當於函數級多態,真的很猛。
6.Swift支持閉包,我覺得可以理解為“匿名函數”。它只需要描述輸入和輸出,並用in分隔輸入和輸出描述。它已經是壹個函數體,不需要定義函數名。
類別和結構
1的構造函數。類被直接調用init()。類函數調用基本和Java、C++壹樣。Self在Java中相當於這個。
2.在Swift中,類成員的訪問控制級別是public、internal、private,對應於Java中的public、protected、private。
3.deinit是壹個析構函數。Java裏也有finalize()函數。但是Java的finalize()函數並不能保證被調用,所以不建議重寫這個函數。
4.類繼承有點像C++,使用:。
5.與Java不同,他的setter和getter函數是隱式調用的。我覺得Swift的設計思路是用戶只需要關心輸入輸出,其他什麽都不要管。比如妳只需要關心設定或者到達這裏。特定的set和get函數被封裝,不需要用戶關心。另壹個例子是上面提到的方法類型。只要定義了輸入和輸出,就定義了壹種方法,所以這種類型的具體實現有很多。
6.Swift枚舉類似於Java,本質上是壹個類,可以包含函數。
7.7的結構。Swift和類基本相同,不同的是結構傳遞的是內容的副本,而類傳遞的是引用。這太棒了。
8.枚舉還支持關聯值,這在Java中是不可用的。
9 .協議類似於Java中的接口。
10 .擴展是強大的,甚至是變態的。它可以動態地給壹個類添加函數和成員變量,在不修改類的源代碼的情況下,動態地使壹個類實現壹個協議。在Java中添加成員變量,添加函數,實現壹個接口,只能通過繼承來實現。這是直接實現的,並對該類的所有對象生效,包括那些在extend之前創建的對象。
11.Swift泛型類似於Java。Swift泛型支持where語句,除了類型控制之外,還可以用於更精細的控制。
內存管理
Swift類似Java,不需要自己管理內存。Swift通過ARC(自動引用計數)機制回收內存,Java有垃圾回收機制保證內存及時回收。但是,兩者的回收機制是不同的。我的理解是,Swift的ARC機制重點關註無效對象,即沒有被任何人引用的對象。因此,如果兩個對象被循環引用,它們就不能被回收,從而導致泄漏。此時,妳需要壹個弱引用或未完成的引用來打破這個環。
而Java的垃圾收集機制則側重於哪些對象是有效的,即GC Root引用的對象有些是有效的,有些是無效的。因此,即使對象相互引用,只要不被GC Root引用,就會被垃圾收集器回收。從這個角度來說,Java的策略更好。也能看出換個角度看問題有多重要。