開始

2023-05-10 10:40 更新

開始

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

項(xiàng)目中有三個(gè)地方需要注意一下:

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

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

  1. 一個(gè)簡(jiǎn)單的 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 的初始化方法。不過目前我們沒有 encodedecode 的必要,所以就把它放在那里就行,調(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í)啦!

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)