天天看點

Swift 程式設計思想 閱讀筆記Swift 程式設計思想

Swift 程式設計思想,第一部分:拯救小馬

Swift 程式設計思想連結Swift 程式設計思想,第一部分:拯救小馬Swift 程式設計思想,第二部分:數組的 Map 方法Swift程式設計思想 第三部分:結構體和類Swift 程式設計思想 第四部分:全部使用map方法

Swift 程式設計思想

連結

http://alisoftware.github.io/swift/2015/09/06/thinking-in-swift-1/

http://alisoftware.github.io/swift/2015/09/20/thinking-in-swift-2/

http://alisoftware.github.io/swift/2015/10/03/thinking-in-swift-3/

http://alisoftware.github.io/swift/2015/10/11/thinking-in-swift-4/

http://swift.gg/2015/09/29/thinking-in-swift-1/

http://swift.gg/2015/10/09/thinking-in-swift-2/

http://swift.gg/2015/10/20/thinking-in-swift-3/

http://swift.gg/2015/10/22/thinking-in-swift-4/

Swift 程式設計思想,第一部分:拯救小馬

問題:

  • 隐式解析可選類型
  • 強制轉型
  • 強制使用try
  • 數組的使用

方案:

  • 使用guard xxx else
  • if let xx=yy{}
  • [ListItem],數組的建立,傳回,引用

Swift 程式設計思想,第二部分:數組的 Map 方法

主要講了怎麼使用map,faltMap

  • map ,U->T,對數組每個元素操作,形成新的資料
  • faltMap,U->T? 某個元素失敗,不會加入最後的數組.

Swift程式設計思想 第三部分:結構體和類

  • struct 值傳遞
  • class 引用類型
Swift的結構體(structs)和類(Class)具有相同的功能 - 除了繼承 - 結構體是值類型(value-types) (是以每一次變量指派都是通過值拷貝的形式,與Int類型很相像),而類屬于引用類型(reference-types),以引用方式傳遞而非值拷貝,這和Objective-C(以及OC中無處不在的難看的*,也代表着引用)中一樣。
  • 聯合操作符
??操作符和ObjC的opt ?: val表達式很像,了解它的人都知道:opt ?? val如果在opt非空的時候傳回它的值,如果是nil的話會傳回val。這意味着如果opt是T?類型,val則必須是T類型,整個表達式的結果也會是T類型。

Swift 程式設計思想 第四部分:全部使用map方法

  • 數組應用map方法
// 作用在Array<T>上的方法
    map( transform: T ->          U  ) -> Array<U>
flatMap( transform: T ->    Array<U> ) -> Array<U>      
  • 在可選類型上應用
// 作用在Optional<T>上的方法
    map( transform: T ->          U  ) -> Optional<U>
flatMap( transform: T -> Optional<U> ) -> Optional<U>      

那麼map方法到底對Optional類型(也叫做T?)做了什麼?

其實很簡單:和作用在Array上的一樣,map方法将Optional中的内容取出來,用指定的transform: T->U方法做出轉換,然後把結果包裝成一個新的Optional。

如果細想一下,這和Array.map做的事情十分相似:這個方法對Array(與之相應的是Optional)中的每個元素使用transform函數轉換,并将轉換過的值封裝在一個新的Array中(與之相應的是Optional),作為結果傳回

  • 把 init 當閉包來用
let iconName = itemDesc["icon"] as? String
let icon = iconName.flatMap { UIImage(named: $0) }      
let iconName = itemDesc["icon"] as? String
item.icon = iconName.flatMap(UIImage.init)      
let iconName = itemDesc["icon"] as? String
item.icon = iconName.flatMap { imageName in UIImage(named: imageName) }      

undefined