編輯:關於Android編程
struct Part{
var name: String
var price: Double
var brand: String
init(name: String,price: Double, brand: String) {
self.name = name
self.price = price
self.brand = brand
}
}
struct Service {
var name: String
var laborDurationInMinutes: Int
init(name: String, laborDurationInMinutes: Int) {
self.name = name
self.laborDurationInMinutes = laborDurationInMinutes
}
}
struct Mechanic {
static var id: Int = 0
var id: Int
var name: String
init(name: String) {
self.name = name
Mechanic.id += 1
self.id = Mechanic.id
}
}
由上可知,Part是一個簡單的結構體,擁有name,price,brand等屬性,並在初始化期間設置值,Service也是相同的模式,在初始化期間設置name和laborDurationInMinutes兩個基本屬性,Mechanic也是一樣,擁有基本屬性並初始化。
class CorporateQuote{
var services: [Service]
var price: Double
var parts: [Part]
var numberOfCars: Int
var startTime: NSDate?
var mechanics: [Mechanic]
var client: String?
var address: String?
init(services: [Service],
price: Double,
parts: [Part],
numberOfCars: Int,
mechanics: [Mechanic]) {
self.services = services
self.price = price
self.parts = parts
self.numberOfCars = numberOfCars
self.mechanics = mechanics
}
func clone() -> CorporateQuote {
return CorporateQuote(services: self.services,
price: self.price,
parts: self.parts,
numberOfCars: self.numberOfCars,
mechanics: self.mechanics)
}
}
由上面代碼可知,我們的CorporateQuote類中有services、price、parts、numberOf、startTime、Carsmechanics、client、address等屬性,並且在初始化方法中,我們設置了services、price、parts、numberOf、Carsmechanics等屬性。並且擁有一個clone方法來獲取CorporateQuote類的實例對象,並且clone方法所使用的參數跟之前實例使用參數一樣,這裡就是實現了復制當前的CorporateQuote。但是這對我們有什麼用處呢?下面一起看看測試代碼:
func testCorporateQuote(){
var steve = Mechanic (name: "Steve Brimington")
var mike = Mechanic(name: "Mike Fulton")
var ali = Mechanic (name: "Ali Belevue")
var corporateMechanics = [steve, mike, ali]
var brakePadReplacement = Service(name: "Brake Pad Replacement", laborDurationInMinutes: 100)
var oilChange = Service(name: "Oil Change", laborDurationInMinutes: 65)
var rotateTires = Service(name: "Roate Tires", laborDurationInMinutes: 45)
var corporateServices = [brakePadReplacement, oilChange, rotateTires]
var corporateParts = [Part(name: "Brake Pads Front", price: 25.65, brand: "ACME Pads"),
Part(name: "Filter", price: 8.99, brand: "ACME Pads"),
Part(name: "Synthetic Oil", price: 15.19, brand: "ACME Pads"),
Part(name: "Brake Pads Rear", price: 32.65, brand: "ACME Pads"),
Part(name: "Air Freshners", price: 3.65, brand: "ACME Pads")]
}
首先在testCorporateQuote函數中添加了如上的代碼,代碼簡單,初始化了相關結構體並使用數組存儲同類變量。如果我們需要更多這樣的數據,我們可以模仿當前代碼例子很輕松的編寫更多的代碼部分。但是假設在上面代碼中,我們共有了mechanics、services、parts等屬性,而且創建corporateMechanics和corporateServices以及corporateParts的代價非常昂貴並且耗時,你是願意只做一次創建操作還是操作多次呢?肯定是一次創建咯,下面我們來生成一個prototype corporateQuote,在測試函數corporateParts下添加如下代碼:
var prototypedCorporeateQuote = CorporateQuote(services: corporateServices,
price: 1488.99,
parts: corporateParts,
numberOfCars: 20,
mechanics: corporateMechanics)
var googleQuote = prototypedCorporeateQuote.clone()
googleQuote.client = "Google"
googleQuote.startTime = NSDate(timeIntervalSinceNow: 0)
googleQuote.address = "1600 Amphitheatre Pkwy, Mountain View"
var facebookQuote = prototypedCorporeateQuote.clone()
facebookQuote.client = "Facebook"
facebookQuote.startTime = NSDate(timeIntervalSinceNow: 1)
facebookQuote.address = "1 Hacker Way, Menlo Park"
var microsoftQuote = prototypedCorporeateQuote.clone()
microsoftQuote.client = "Microsoft"
microsoftQuote.startTime = NSDate(timeIntervalSinceNow: 2)
microsoftQuote.address = "1085 La Avenida St, Mountain View"
現在我們有了prototypedCorporeateQuote變量,我們可以使用它的clone方法創建更多的其他corporate quotes並且擁有著相同的配置。他們將擁有相同的services、price、parts、numberOf、Carsmechanics。所有的操作都不涉及再次創建任意的這些值。而且我們僅僅是調用了clone()方法,就獲得了復雜和昂貴的預配置CorporateQuote類的實例。這看起來非常的棒,這時我們能夠修改每一個corporate quote,指定具體的客戶(client)、日期、地址等信息了。
Android MediaPlayer 框架UML圖
Android開發交流群:50342056 目的 本文用一個UML類圖,講解mp3文件播放的框架流程。內容以下幾個方面: 1.UML類圖 2.stagefrightPl
Android - 返回上一個界面finish()方法
返回上一個界面finish()方法 Android可以使用finish()方法,實現函數返回的功能,當不是Activity內部調用時,需要使用getActi
Android開發之基於Service的音樂播放器
這是一個基於Service組件的音樂播放器,程序的音樂將會由後台的Service組件負責播放,當後台的播放狀態改變時,程序將會通過發送廣播通知前台Activity更新界面
我的Android進階之旅------Android 5.0中出現警告的解決方法: Service Intent must be explicit:
1.錯誤描述今天在Android4.4 的小米4手機上運行我的程序的時候沒有報錯,而在Android 5.1的華為P7上運行我的程序的時候報了以下的錯誤,錯誤提示如下:E