看了兩天《Learn Objective-C on the MAC》 中文版本《Objective-C基礎編程》,大概認真讀到了第9章記憶體管理部分,感覺這語言可比C++簡單多了。 第一天,因為有C語言基礎的緣故,我在windows 上安裝了GNUstep (Objective-C)開發環境,變看電子 ...
看了兩天《Learn Objective-C on the MAC》 中文版本《Objective-C基礎編程》,大概認真讀到了第9章記憶體管理部分,感覺這語言可比C++簡單多了。
第一天,因為有C語言基礎的緣故,我在windows 上安裝了GNUstep (Objective-C)開發環境,變看電子書籍,邊在PC上編譯運行樹上的示例,幾乎一個都沒放過,還做了不少筆記。 (畢竟作者 Mark Dalrymaple & Scott Knaster 是高屋建瓴,敘述技術娓娓道來,將其實很深的技術要點深入淺出地講出,言簡意賅,還將Objc與C語言做對比來說明,印象深刻)。不知不覺就在第一天看完了前8章。
但是從第9章開始記憶體管理部分,可沒有那麼好啃了。
“......我們常常講這些規則複雜化,同樣,忽略這些規則也是一種常犯的錯誤。如果你正在漫無目的地濫用retain 和release 方法1⃣️修正這些錯誤,那就說明你還沒有真正掌握這些規則。你需要放慢速度,休息一下,然後再繼續閱讀......“ 在《Objective-C基礎編程》中,作者如是說。
看說的多好,欲速則不達。
同時,我在臨睡前也翻翻知乎的帖子,查看一下前輩的學習建議和曲線。
個人總結如下:
- 如果確定要長期在MAC/IOS下開發,Objective-C & swift 都要學,有了Objc 基礎的人千萬不要輕視對swift的學習,當然學習C/C++的對Objc/swift 不屑的早晚有後悔的一天。 畢竟語言只是個工具,如果非常熟悉某種語言的話,其實學習objc/swift 的代價會非常小。
- 個人在前兩天決心入手MAC book前涉獵了一下app store 上的調查,總結出的結論是: 技術在MAC/IOS上不是瓶頸,難得的是想法和創意。所以在確定要開發項目前,先做一些調查,有利可圖再繼續做下去,不要埋首到技術鑽研和無窮盡的編碼中,那樣太沒有趣味了。
看了《Objective-C基礎編程》初步對Objc 有了個初步的瞭解, (條條框框比C++多,但是要比C 多了不少,掌握起來其實有很大難度的)。
但是swift 倒是一門易學易用的語言,在圖書館借到了 Pitre 的《swift 基礎教程2nd》,粗略翻了一下,這門語言可跟javascipt 很像呀。
好了,開始上路。
- Swift 2 是Apple 從頭打造的現代語言,功能強大且易於學習。Apple公司已將其作為日益增長的iOS/watchOS/tvOS/Mac OS X 應用程式的開發語言
- Xcode 目前最新的Xcode 最新版本是Xcode8.3
- LLVM 在xcode 中,LLVM在幕後工作,這種編譯器技術讓Swift 語言變得優雅,並將Swift 代碼轉換為Apple設備處理器能夠運行的機器嗎
- REPL (Read-Eval-Print-Loop)是一個命令行工具,可用於快速嘗試Swift 代碼。在MAC OS X中,可在terminal 中運行它
- playground 在Xcode中,提供了交互性和實時的結果,非常適合用來學習Swift
邊看書邊實踐邊寫隨筆:
Chapter 1 Swift 簡介
1. 在Terminal 中輸入xcrun swift 可進入REPL,進行swift代碼測試
2. 使用var 定義變數,使用let 定義常量
3. swift 基本類型:
Bool, Int ,Int32,Int64,Int8,Int16, UInt,UInt32,UInt64,UInt8,UInt16,Float,Double,Character,String
4. 數學運演算法 加 (+),減 (-),乘 (*),除 (/),各種語言在這點都是一個德性。
5. 數值表示法, 二進位,八進位,16進位,科學計數法,與C同
6. 輕鬆顯示字元串
使用嵌入表示法\() 來引用變數/常量,如
let n=10 let name= “Tom” let city=“Shanghai” print (“I am \(name), from \(city), age=\(n)")
7. 使用typealias 定義別名,與C中的typedef 同,如
typealias EightBits=UInt8 var reg:EightBits=0
8.元祖 (Tuple) 元祖是由一個或多個變數/常量/字面量組成的單個實體,如
let myDreamCar=(2017,"Mercedes-Benz","M-Class") print (myDreamCar.0) print (myDreamCar.1) print (myDreamCar.2)
9. 可選類型, (現在還不明白這個用處是?)
var v: Int?
Chapter2 集合
1. 數組
let candyJar=["Peppermints", "Gooey Bears","Happy Ranchers"] print (candyJar[0]) candyJar.append("Candy Canes") //!!! error ,the array is constant var refillableCandyJar =candyJar //將常量數組賦給變數數組 refillableCandyJar.append("Candy Canes") refillableCandyJar+=[Peanut Clusgters"]; refillableCandyJar+=["Banna Taffy","Bubble Gum"] var h20:[String]=["Hydogen","Hydrogen","Oxygen"]; //如果要在聲明數組時指定其值的類型
與C同,數組中包含的元素類型必須相同。
用var 定義的是可變的數組,使用let定義的是常量數組。
swift語言中的數組可以類比為C中的向量 vector。
swift中數組可以修改/替換(指定數組索引並賦給它新值即可),刪除(removeAtIndex/removeLast),插入(insert:atIndex),合併(+)
- 字典
字典包括兩個不同的部分:鍵 (key)和 值 (value),鍵和值的類型可以不同,但所有鍵的類型都必須相同,所有值的類型也必須相同。
va r dict =["one":1, "two":2,"three":3,"four":4] print (dict["one"]) //find dict["five"]=5 //add dict["one"]=11 //update dict["one"]=nil //delete dict.removeValueForKey("two") //delete
- 數組的數組
//Todo
//add some codes
- 創建空數組和詞典
var myEmptyArray:Array<Int>=[] //or var myEmptyArray=[Int]() myEmptyArray+=[33,44,66] myEmptyArray=[] //delete all items var myEmptyDictionary =Dictionary<String,Double> () myEmptyDictionary =["myKey",12.34]
- 數組迭代
//method 1 for itemName in list { ... do something with itemName } //method 2 //迭代數組的值及其索引 for (index, candy) in combinedRefillableCandyJar.enumerate () { print ("Candy \(candy) is in position \(index) of the array") }
- 迭代詞典
for (index, value ) in arceneauxsOtherCandyRoute { print ("\(key) has a candy jar with the following contents:\(value)") }
swift 基本數據類型學習&介紹完畢
<Chapter 2 end >