小費APP改為手開發票小幫手,練習if let optional

莫內
彼得潘的 Swift iOS / Flutter App 開發教室
11 min readMar 28, 2020

練習小費作業,想了一下不如改成我最常用的發票算稅,練習了if let…
雖然對optional還是有點混亂,但練習多了應該就會習慣了。

以下網站還滿好用的,仿照他處理一個APP起來

剩下幾個地方要繼續處理細節
1.包括要在大寫中文把拾萬千百給寫入
2.API要處理公司名稱跟統編查詢
3.數字無限輸入超過欄位會閃退問題

過程中比較卡關的地方:
1.四捨五入
2.把數字轉成金錢格式
3.金錢格式去掉逗號,可隨時輸入隨時計算

import UIKit
import Foundation

class ViewController: UIViewController {

@IBOutlet weak var salesAmountInput: UITextField!
@IBOutlet weak var taxRate: UITextField!
@IBOutlet weak var taxAmount: UITextField!
@IBOutlet weak var totalAmountInput:UITextField!
@IBOutlet weak var yearnow: UILabel!
@IBOutlet weak var capitalshow: UILabel!




override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.

//取得日期與並顯示
let now = Date()
let dateFormatter: DateFormatter = DateFormatter()
dateFormatter.dateFormat = "中華民國yyy年MM月dd日"
dateFormatter.locale = Locale(identifier: "zh_Hant_TW") // 設定地區(台灣)
dateFormatter.timeZone = TimeZone(identifier: "Asia/Taipei") // 設定時區(台灣)
dateFormatter.calendar = Calendar(identifier: Calendar.Identifier.republicOfChina)
let dateFormatString:String = dateFormatter.string(from:now)
yearnow.text = String("\(dateFormatString)")



}

//收鍵盤
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)

}
@IBAction func salessend(_ sender: Any) {

//無論輸入框收到什麼值,都先把逗號給幹掉
let saleshavedou = salesAmountInput.text
let salesremovedou = saleshavedou!.replacingOccurrences(of: ",", with: "") //取代
salesAmountInput.text = salesremovedou

//處理optinonal
if let salesAmount = salesAmountInput.text,let sales = Double(salesAmount){

//計算開始
let total = sales * 105 / 100
let totalmoney = String(format: "%.0f", total)
let totalmoneyint = Int(totalmoney)

//把total數字千分位,轉換金錢格式
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.numberStyle = .decimal
formatter.locale = Locale(identifier: "zh_TW")
formatter.maximumFractionDigits = 0
let totalmoneyString = formatter.string(from: NSNumber(value: totalmoneyint!))
totalAmountInput.text = totalmoneyString

//先把sales數字千分位
let salesmoneyString = formatter.string(from:NSNumber(value:sales))
salesAmountInput.text = salesmoneyString

//算稅
let tax = sales * 5 / 100
let taxmoney = String(format: "%.0f", tax)
let taxmoneyint = Int(taxmoney)
let taxmoneyString = formatter.string(from:NSNumber(value:taxmoneyint!))
taxAmount.text = taxmoneyString

//大寫中文
capitalshow.text = totalmoneyString?
.replacingOccurrences(of: "0", with: "零")
.replacingOccurrences(of: "1", with: "壹")
.replacingOccurrences(of: "2", with: "貳")
.replacingOccurrences(of: "3", with: "參")
.replacingOccurrences(of: "4", with: "肆")
.replacingOccurrences(of: "5", with: "伍")
.replacingOccurrences(of: "6", with: "陸")
.replacingOccurrences(of: "7", with: "柒")
.replacingOccurrences(of: "8", with: "捌")
.replacingOccurrences(of: "9", with: "玖")
.replacingOccurrences(of: ",", with: "")
}

//replacingOccurrences(of: ",", with: "")
//totalAmountInput.text = String(Double(salesAmountInput.text!)! * 105/100)
//taxAmount.text = String(Double(salesAmountInput.text!)! * 5/105)
}



@IBAction func totalsend(_ sender: Any) {

//無論輸入框收到什麼值,都先把逗號給幹掉
let totalhavedou = totalAmountInput.text
let totalremovedou = totalhavedou!.replacingOccurrences(of: ",", with: "") //取代
totalAmountInput.text = totalremovedou

if let totalAmount = totalAmountInput.text,let total = Double(totalAmount){

//算銷售
let sales = total / 105 * 100
let salesmoney = String(format: "%.0f", sales)
let salesmoneyint = Int(salesmoney)

//把數字千分位
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.numberStyle = .decimal
formatter.locale = Locale(identifier: "zh_TW")
formatter.maximumFractionDigits = 0
let salesmoneyString = formatter.string(from: NSNumber(value: salesmoneyint!))
salesAmountInput.text = salesmoneyString

//先把sales數字千分位
let totalmoneyString = formatter.string(from:NSNumber(value:total))
totalAmountInput.text = totalmoneyString

//算稅
let tax = sales * 5 / 100
let taxmoney = String(format: "%.0f", tax)
let taxmoneyint = Int(taxmoney)
let taxmoneyString = formatter.string(from:NSNumber(value:taxmoneyint!))
taxAmount.text = taxmoneyString

//大寫中文
capitalshow.text = totalmoneyString?
.replacingOccurrences(of: "0", with: "零")
.replacingOccurrences(of: "1", with: "壹")
.replacingOccurrences(of: "2", with: "貳")
.replacingOccurrences(of: "3", with: "參")
.replacingOccurrences(of: "4", with: "肆")
.replacingOccurrences(of: "5", with: "伍")
.replacingOccurrences(of: "6", with: "陸")
.replacingOccurrences(of: "7", with: "柒")
.replacingOccurrences(of: "8", with: "捌")
.replacingOccurrences(of: "9", with: "玖")
.replacingOccurrences(of: ",", with: "")
}

//salesAmountInput.text = String((Double(totalAmountInput.text!)! / 105) * 100)
//taxAmount.text = String((Double(totalAmountInput.text!)! / 105) * 5)
}

}

1.String Format 四捨五入的疑問

2.金錢格式

3.取代文字

--

--