編輯:關於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開發交流群:50342056 目的 本文用一個UML類圖,講解mp3文件播放的框架流程。內容以下幾個方面: 1.UML類圖 2.stagefrightPl
返回上一個界面finish()方法 Android可以使用finish()方法,實現函數返回的功能,當不是Activity內部調用時,需要使用getActi
這是一個基於Service組件的音樂播放器,程序的音樂將會由後台的Service組件負責播放,當後台的播放狀態改變時,程序將會通過發送廣播通知前台Activity更新界面
1.錯誤描述今天在Android4.4 的小米4手機上運行我的程序的時候沒有報錯,而在Android 5.1的華為P7上運行我的程序的時候報了以下的錯誤,錯誤提示如下:E