8.改進應用程序

##8.1數字格式設置(storyboard) 輸入圖片說明 輸入圖片說明 ##8.1.2可選類型拆封ide

import Cocoa
extension Double{
	var dollars : String{
		let formatter : NumberFormatter = NumberFormatter()//NSNumberFormatter棄用
		var result : String?//將result的類型聲明爲可選類型
		formatter.numberStyle = .currency
		result = formatter.string(from: NSNumber(value:self))
//		.string(from: NSNumber)返回爲可選類型,由於若是轉換失敗會返回nil
		if (result == nil){
			return "FORMAT FAILURE!"
		}
		return result!//拆封可選變量,拆封指的是將變量轉換爲值不能爲nil的變量
	}

}
class ViewController: NSViewController {
	//"!"爲隱式封拆的可選類型,至關於告訴編譯器,在該變量爲nil時毫不會訪問它
	@IBOutlet weak var loanAmountField :NSTextField!
	@IBOutlet weak var interestRateField : NSTextField!
	@IBOutlet weak var yearsField : NSTextField!
	@IBOutlet weak var resultsField : NSTextField!
	var simpleInterestCalculator : SimpInterest = SimpInterest()
	var compoundInterestCalculator : CompoundInterest = CompoundInterest()
	override func viewDidLoad() {
		super.viewDidLoad()

	}

	override var representedObject: Any? {
		didSet {
		
		}
	}
	[@IBAction](https://my.oschina.net/u/866341) func buttonClicked(sender : NSButton){
		var result : Double
		result = simpleInterestCalculator.calculate(loanAmount: loanAmountField.doubleValue, interestRate: interestRateField.doubleValue , years: yearsField.integerValue)
//		self.resultsField.stringValue = result.description//description讓類可以返回其數據的String表示
		self.resultsField.stringValue = result.dollars
	}
	@IBAction func compoundbuttonClicked(_ sender: NSButton) {
		var result : Double
		result = compoundInterestCalculator.calculate(loanAmount: loanAmountField.doubleValue, interestRate: interestRateField.doubleValue , years: yearsField.integerValue)
		//		self.resultsField.stringValue = result.description//description讓類可以返回其數據的String表示
		self.resultsField.stringValue = result.dollars
	}
}

8.2單元測試 if Use of undeclared type 'SimpInterest' take class Target Membership choose單元測試

import XCTest

class MACSwiftTeststwo: XCTestCase {
	var mySimpInterestCalculator : SimpInterest = SimpInterest()
	var myCompoundInterestCalculator : CompoundInterest = CompoundInterest()
	
    override func setUp() {
        super.setUp()
        // Put setup code here. This method is called before the invocation of each test method in the class.
		//在這裏插入設置代碼,調用這個類中的每一個測試方法前,都將調用這個方法
    }
    
    override func tearDown() {
        // Put teardown code here. This method is called after the invocation of each test method in the class.
		//在這裏插入清理代碼,調用這個類中的每一個測試方法後,都將調用這個方法
        super.tearDown()
    }
	//功能測試用例
	func testSimpleInterest(){
		var result : Double
		result = mySimpInterestCalculator.calculate(loanAmount: 25_000, interestRate: 0.08, years: 10)
		XCTAssertEqualWithAccuracy(result,45000,accuracy:0.1 ,"Unexpected result \(result)")//1.要評估的變量 2.該變量應包含的值 3準確因子 4.未經過測試時顯示的String
		//傳入的變量和預期結果相差不超過0.1
	}
	func testCompoundInterest(){
		var result : Double
		result = myCompoundInterestCalculator.calculate(loanAmount: 25_000, interestRate: 0.08, years: 10)
		XCTAssertEqualWithAccuracy(result, 25002+0.1, accuracy: 0.1,"Unexpected result \(result)")
	
	}
    //示例測試方法
//    func testExample() {
//        // This is an example of a functional test case.
//        // Use XCTAssert and related functions to verify your tests produce the correct results.
//    }
//    
//    func testPerformanceExample() {
//        // This is an example of a performance test case.
//        self.measure {
//            // Put the code you want to measure the time of here.
//        }
//    }
	
}
相關文章
相關標籤/搜索