下載初始項(xiàng)目并解壓,在 Xcode 中打開 BlueLibrarySwift.xcodeproj
項(xiàng)目文件。
項(xiàng)目中有三個(gè)地方需要注意一下:
ViewController
有兩個(gè) IBOutlet
,分別連接到了 UITableView
和 UIToolBar
上。
HTTP
客戶端類 (HTTPClient
) ,里面還沒有什么內(nèi)容,需要你去完善。注意:其實(shí)當(dāng)你創(chuàng)建一個(gè)新的 Xcode 的項(xiàng)目的時(shí)候,你的代碼里就已經(jīng)有很多設(shè)計(jì)模式的影子了: MVC、委托、代理、單例 - 真是眾里尋他千百度,得來全不費(fèi)功夫。
在學(xué)習(xí)第一個(gè)設(shè)計(jì)模式之前,你需要?jiǎng)?chuàng)建兩個(gè)類,用來存儲(chǔ)和展示專輯數(shù)據(jù)。
創(chuàng)建一個(gè)新的類,繼承 NSObject
名為 Album
,記得選擇 Swift 作為編程語言然后點(diǎn)擊下一步。
打開 Album.swift
然后添加如下定義:
var title : String!
var artist : String!
var genre : String!
var coverUrl : String!
var year : String!
這里創(chuàng)建了五個(gè)屬性,分別對(duì)應(yīng)專輯的標(biāo)題、作者、流派、封面地址和出版年份。
接下來我們添加一個(gè)初始化方法:
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
}
這樣我們就可以愉快的初始化了。
然后再加上下面這個(gè)方法:
func description() -> String {
return "title: (title)" +
"artist: (artist)" +
"genre: (genre)" +
"coverUrl: (coverUrl)" +
"year: (year)"
}
這是專輯對(duì)象的描述方法,詳細(xì)的打印了 Album
的所有屬性值,方便我們查看變量各個(gè)屬性的值。
接下來,再創(chuàng)建一個(gè)繼承自 UIView
的視圖類 AlbumView.swift
。
在新建的類中添加兩個(gè)屬性:
private let coverImage: UIImageView!
private let indicator: UIActivityIndicatorView!
coverImage
代表了封面的圖片,indicator
則是在加載過程中顯示的等待指示器。
這兩個(gè)屬性都是私有屬性,因?yàn)槌?AlbumView
之外,其他類沒有必要知道他倆的存在。在寫一些框架或者類庫(kù)的時(shí)候,這種規(guī)范十分重要,可以避免一些誤操作。
接下來給這個(gè)類添加初始化化方法:
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)
}
因?yàn)?UIView
遵從 NSCoding
協(xié)議,所以我們需要 NSCoder
的初始化方法。不過目前我們沒有 encode
和 decode
的必要,所以就把它放在那里就行,調(diào)用父類方法初始化即可。
在真正的初始化方法里,我們?cè)O(shè)置了一些初始化的默認(rèn)值。比如設(shè)置背景顏色默認(rèn)為黑色,創(chuàng)建 ImageView
并設(shè)置了 margin
值,添加了一個(gè)加載指示器。
最終我們?cè)偌由先缦路椒ǎ?/p>
func highlightAlbum(
if didHighlightView == true {
backgroundColor = UIColor.whiteColor()
} else {
backgroundColor = UIColor.blackColor()
}
}
這會(huì)切換專輯的背景顏色,如果高亮就是白色,否則就是黑色。
在繼續(xù)下面的內(nèi)容之前, Command + B
試一下確保沒有什么問題,一切正常?那就開始第一個(gè)設(shè)計(jì)模式的學(xué)習(xí)啦!
更多建議: