鍍金池/ 教程/ iOS/ 開始
開始
裝飾者模式 - Decorator
單例模式 - Singleton
外觀模式 - Facade
觀察者模式 - Observer
準備工作
iOS 設計模式
適配器模式 - Adapter
備忘錄模式 - Memento
最后的潤色
小結
設計模式之王- MVC

開始

下載初始項目并解壓,在 Xcode 中打開 BlueLibrarySwift.xcodeproj 項目文件。

項目中有三個地方需要注意一下:

  1. ViewController 有兩個 IBOutlet ,分別連接到了 UITableViewUIToolBar 上。

  2. 在 StoryBoard 上有三個組件設置了約束。最上面的是專輯的封面,封面下面是列舉了相關專輯的列表,最下面是有兩個按鈕的工具欄,一個用來撤銷操作,另一個用來刪除你選中的專輯。 StoryBoard 看起來是這個樣子的:

http://wiki.jikexueyuan.com/project/ios-design-patterns-in-swift/images/1.2.png" alt="" />

  1. 一個簡單的 HTTP 客戶端類 (HTTPClient) ,里面還沒有什么內(nèi)容,需要你去完善。

注意:其實當你創(chuàng)建一個新的 Xcode 的項目的時候,你的代碼里就已經(jīng)有很多設計模式的影子了: MVC、委托、代理、單例 - 真是眾里尋他千百度,得來全不費功夫。

在學習第一個設計模式之前,你需要創(chuàng)建兩個類,用來存儲和展示專輯數(shù)據(jù)。

創(chuàng)建一個新的類,繼承 NSObject 名為 Album ,記得選擇 Swift 作為編程語言然后點擊下一步。

打開 Album.swift 然后添加如下定義:

var title : String!
var artist : String!
var genre : String!
var coverUrl : String!
var year : String!

這里創(chuàng)建了五個屬性,分別對應專輯的標題、作者、流派、封面地址和出版年份。

接下來我們添加一個初始化方法:

init(title: String, artist: String, genre: String, coverUrl: String, year: String) {
  super.init()

  self.title = title
  self.artist = artist
  self.genre = genre
  self.coverUrl = coverUrl
  self.year = year
}

這樣我們就可以愉快的初始化了。

然后再加上下面這個方法:

func description() -> String {
  return "title: (title)" +
   "artist: (artist)" +
   "genre: (genre)" +
   "coverUrl: (coverUrl)" +
   "year: (year)"
}

這是專輯對象的描述方法,詳細的打印了 Album 的所有屬性值,方便我們查看變量各個屬性的值。

接下來,再創(chuàng)建一個繼承自 UIView 的視圖類 AlbumView.swift。

在新建的類中添加兩個屬性:

private let coverImage: UIImageView!
private let indicator: UIActivityIndicatorView!

coverImage 代表了封面的圖片,indicator 則是在加載過程中顯示的等待指示器。

這兩個屬性都是私有屬性,因為除了 AlbumView 之外,其他類沒有必要知道他倆的存在。在寫一些框架或者類庫的時候,這種規(guī)范十分重要,可以避免一些誤操作。

接下來給這個類添加初始化化方法:

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

init(frame: CGRect, albumCover: String) {
    super.init(frame: frame)
    backgroundColor = UIColor.blackColor()
    coverImage = UIImageView(frame: CGRectMake(5, 5, frame.size.width - 10, frame.size.height - 10))
    addSubview(coverImage)
    indicator = UIActivityIndicatorView()
    indicator.center = center
    indicator.activityIndicatorViewStyle = .WhiteLarge
    indicator.startAnimating()
    addSubview(indicator)
}

因為 UIView 遵從 NSCoding 協(xié)議,所以我們需要 NSCoder 的初始化方法。不過目前我們沒有 encodedecode 的必要,所以就把它放在那里就行,調(diào)用父類方法初始化即可。

在真正的初始化方法里,我們設置了一些初始化的默認值。比如設置背景顏色默認為黑色,創(chuàng)建 ImageView 并設置了 margin 值,添加了一個加載指示器。

最終我們再加上如下方法:

func highlightAlbum(
    if didHighlightView == true {
        backgroundColor = UIColor.whiteColor()
    } else {
        backgroundColor = UIColor.blackColor()
    }
}

這會切換專輯的背景顏色,如果高亮就是白色,否則就是黑色。

在繼續(xù)下面的內(nèi)容之前, Command + B 試一下確保沒有什么問題,一切正常?那就開始第一個設計模式的學習啦!