Swift編程權威指南第2版 讀後收穫

來源:互聯網
上載者:User
  自從參加工作一直在用OC做iOS開發。在2015年的時候蘋果剛推出swift1.0不久,當時畢竟是新推出的語言,大家也都很有激情的學習。不過在學完後發現很難在實際項目中使用,再加上當時公司項目都是基於OC來做的開發,就把swift放一邊了。  後來也不斷看到網上對swift的各種評價,有好有壞,總之是一門剛推出的語言吧。文法設計,與OC無縫銜接等存在一些問題還是可以接受的。  自從2017年9月蘋果推出swift4.0後,基本大的文法變動沒有了。慢慢的有很多公司開始使用swift開發公司項目了。這也說明swift已經穩定的可以解決實際項目問題了。  2018年因為工作變動,入職現在的公司。公司的項目是大部分基於swift開發,少量使用OC。這個時候我感覺需要系統學習下swift了。在網上搜了搜有沒有比較好的swift書籍。看了很多評價發現《Swift編程權威指南》無論從入門難度還是講解方式都挺適合我的。索性就選它了。我是用kindle看的。時間是在上下班的地鐵上和下班後的休息時間。前後用時一個月左右。  閱讀這本書對我的感受還是挺多的。索性把讀完的感受寫下來。因為人的記憶力太弱了,一星期忘一半,二星期忘七成。我怕不寫下來。半年後我基本上不記得說了都是講什麼了。  這裡講的基本上是與OC的對比,還後後面三章的三個項目作者的開發方式對我目前開發方式的反思。  一、swift對比OC來說它要表達的哲學是:安全,簡潔。這兩點在平時的編程中無處不在,舉個例子:
classDog: NSObject{    letorigin: String= "中國"    fileprivatevarname: String?    privatevarage: Int?        init(_name: String?, age: Int= 1) {        self.name= name ?? "旺財"        self.age= age    }}

  定義了一個Dog類,一個常量“origin”,當一個變數被定義成let型,則只能被賦值一次。“name”和”age”是兩個可空類型的變數。重載了一個init方法,在init方法中有兩個形參。“name”為可空類型,”age”的預設值為一。在init方法中將這兩個變數賦值給屬性。其中判斷name有值就設定name,為空白時設定預設值“旺財”。

  定義一個類只需這麼幾行代碼,相比OC簡潔了很多。安全上:顯示標識出哪些變數可空,哪些變數不可修改。即提高了效能,又提高了安全性。  2.OC中的block代碼塊被swift中的閉包替代在swift中,函數也是一等公民,同基本類型一樣。可以做屬性,函數參數,傳回值自由使用。其定義方式同OC區別很大,如:swift定義與OC的定義
    let sum: ((Int,Int) -> Int) = {(a, b) in            returna + b     }     let res = sum(1, 2)     print(res)    int(^SumBlock) (int, int) = ^(intx, inty) {        return  x + y;    };
  3.字串使用的區別對於平時使用較多的字串處理,變化還是比較大的。
let str = "hello world"var str0 = str.prefix(2)//前兩個var str1 = str.suffix(2)//後兩個        let index0 = str.index(str.endIndex, offsetBy: -4)var str2 = str[index0..<str.endIndex]//後4個        let index1 = str.index(str.startIndex, offsetBy: 4)var str3 = str[str.startIndex..<index1]//前4個

與OC的對比

    NSString*str = @"hello world";    id str0 = [str substringToIndex:2];    id str1 = [str substringFromIndex:str.length-2];    id str2 = [str substringWithRange:NSMakeRange(2, 3)];

 

4.在swift中,結構體的使用非常廣泛,它的作用和用法與類相似,主要區別是結構體不能被繼承。所以考慮到如果類型不會被繼承產生子類,都可以使用結構體替換。此外結構體嵌套也是swift與OC相比變化較大的部分。
struct Animal {    let region = "中國"    var name: String?    var color = UIColor.red         init(name: String,color: UIColor) {        self.name= name        self.color= color    }        struct Dog {        let legNum = 4        func run() -> String{            return"跑回家"        }    }}

 

5.枚舉。swift提供的枚舉比OC強大太多。枚舉中可以繼續定義枚舉,結構體,類,方法。非常靈活。 
enum SDCEnumType: Int{    case circle = 20    case check        func enumTypeString(type: SDCEnumType) -> String{        switch type {        case .circle:            return"circle"        default:            if type.rawValue== 21{                return"check"            } else{                return"其他情況"            }        }    }        enum SDCEnumSubType {        case square(SDCEnumType)        case ellipse(SDCEnumType)    }}
  6.swift提供的協議也是非常的靈活,可以進行協議擴充,協議繼承,定於初始化方法,協議關聯等。
protocol Student {    var name: String{getset}    var age: Int{get}    static func study(date:Date) -> Date        init(name:String)}extension Student{    var score:Float{        return80.8    }    }protocol Childe:Student{    }

 

7.後面的Mac,iPhone,OC與Swift混合項目讓我對編程過程的理解:1.平時很少關注Mac程式開發,這本書在後面的例子中寫了一個Mac應用的demo。算是對Mac應用有了一定的認識。2.編程步驟分兩步:一,實現功能。二,進行設計模式調整。這個兩個步驟在平時的編程中,我只是進行代碼實現,對於完成功能後的設計模式最佳化卻沒有做。想想工作了這麼久,編程都是只走了一半,真是汗顏。  8.範型的使用。在OC中範型常用的情境是對集合內容的限制,而在swift中,範型已經涉及到函數。這樣瞬間使函數的戰鬥力增加了10倍。swift是強型別語言,同一個運算子兩邊的類型必須是一致的。
func SwapTwoValues <T> (inout a: T,inout b :T){    let  tempValue = a    a = b    b = tempValue} structIntStack{    var items = [Int]()    //壓棧    mutating func push(item:Int){        items.append(item)    }    //出棧    mutating func pop()->Int{        return items.removeLast()    }} struct Stack<Ele>{    var items = [Ele]()    mutating func push(item:Ele){        items.append(item)    }    mutating func pop()->Ele{        return items.removeLast()    }}
  9.在swift中,每個運算子其實也是一個函數。這個與OC比起來有著概念性的差別。 
//前置運算子,表示2的var0次方prefix operator ^prefix func^ ( var0: Double) -> Double{    return pow(2, var0)}//後置運算子,表示var0的2次方postfix operator ^postfix func ^ (var0: Double) -> Double{    return var0*var0}

 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.