English Number to Myanmar Number (Swift)

English နံပတ်ကနေ မြန်မာ နံပတ်ကို ပြန်ပြောင်းဖို့အတွက် အတိုဆုံး ပုံစံ နဲ့ ဘယ်လို ရေးလို့ ရမလဲဆိုပြီး စမ်းကြည့်ထားတာပါ။

Code

var eng = 890

var k = "\(eng)".map { UnicodeScalar(String($0))!.value + 4112 }.reduce("") { "\($0)\(String(Character(UnicodeScalar($1)!)))" }
print(k)

Swift မှာ အဆင်ပြေတာက reduce က ပထမဆုံး အခန်းကနေ စတယ်။ reduce("") ဖြစ်သည့်အတွက် previous value က empty string ပဲဖြစ်နေသေးတယ်။

အကယ်၍ အနှုတ် ၊ဒဿမ တွေ ပါလာရင်တော့

var k = "\(eng)".map { (char) -> Int in
    let code = Int(UnicodeScalar(String(char))!.value)
    return (char == "." || char == "-") ? code : code + 4112
}.reduce("") { "\($0)\(String(Character(UnicodeScalar($1)!)))" }

ဆိုပြီး ရေးနိုင်ပါတယ်။

Int , Double စတာတွေထဲမှာ extension အနေနဲ့ သုံးမယ် ဆိုရင်

import Foundation

protocol MyanNum {}

extension MyanNum {
    func toMyanmarNumber() -> String? {
        
        guard let this = self as? NSNumber else {
            return nil
        }
        let value =  "\(this)".map { (char) -> Int in
            let code = Int(UnicodeScalar(String(char))!.value)
            return (code >= 48 && code <= 57) ? code + 4112 : code
            }.reduce("") { "\($0)\(String(Character(UnicodeScalar($1)!)))" }
        return value
    }
}

extension Int : MyanNum {}
extension Double : MyanNum {}

print(76.toMyanmarNo())
print(22.987.toMyanmarNo())

အဲဒီအခါမှာ Int, Double တွေကို တိုက်ရိုက် ခေါ်ပြီးတော့ မြန်မာ ဂဏန်း တန်ဖိုး ထုတ်နိုင်ပါတယ်။

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.