Stringのextensionにcomputed propertyをつくる
before :
extension String { func numeralsToNumber() -> String { enum Chartype { case numerical case exp case normal init(_ number : Int) { switch number { case 0,1: self = .numerical // case 1: // self = .exp default: self = .normal } } } let japaneseNumericalChars : [String : String] = [ "〇": "0", "一": "1", "二": "2", "三": "3", "四": "4", "五": "5", "六": "6", "七": "7", "八": "8", "九": "9", ] let japaneseChars : Set = Set(japaneseNumericalChars.keys) let japaneseNumericalExpChars : [String : String] = [ "十": "1", "百": "2", "千": "3", "万": "4", "億": "8", ] let japaneseExpChars : Set = Set(japaneseNumericalExpChars.keys) var splitedStr : [String] = [] // 以下略
after :
extension String { var japaneseNumericalChars : [String : String] { return [ "〇": "0", "一": "1", "二": "2", "三": "3", "四": "4", "五": "5", "六": "6", "七": "7", "八": "8", "九": "9", ] } var japaneseChars : CharacterSet { return CharacterSet(charactersIn: japaneseNumericalChars.keys.joined()) } private func convertCharToStr1To9(_ char : Character) -> String { return japaneseNumericalChars[char.description]! } var japaneseNumericalExpChars : [String : String] { return [ "十": "1", "百": "2", "千": "3", "万": "4", "億": "8", ] } var japaneseExpChars : CharacterSet { return CharacterSet(charactersIn: japaneseNumericalExpChars.keys.joined()) } private func convertExpStrToNumStr(_ str : String) -> String { return japaneseNumericalChars[str]! } enum Chartype { case numerical case exp case normal init(_ number : Int) { switch number { case 0,1: self = .numerical default: self = .normal } } } func numeralsToNumber() -> String { var splitedStr : [String] = [] // 以下略
computed propertyはletでできないとかdictionaryプロパティに直接アクセスできないから専用のメソッドを作ったりしないといけないとか色々あったけど大きな問題はなく実装できた。