SwiftUI沼でゆっくり浸る 郵便番号DetailViewの起動時のZip解凍
こんにちは、川上です。
アプリの解凍から郵便番号DetailView用表示Arry作成の前掲の件の続きです。
1 2 | // MARK: === 郵便番号データZipのLoad self.vm.getZip(tfklstIdx,postsIdx) |
郵便番号DetailViewの起動時のonAppear()内で、サイトからZipをLoadし、解凍して郵便番号データListの表示Arryを作成するのでした。
1 2 3 4 | class PostNumberViewModel:ObservableObject { ・・・ @Published var postArry: [stPostNumber] = [] // 郵便番号、住所データの型 arry } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | func getZip(_ lstidx:Int,_ postidx:Int) { let urlstr = tofukenAreaArry_Datas[lstidx] .postss[postidx] .dl_url // MARK: === zip 保存存在チェック if LFmanager.isZipSaveFileExist(urlstr) { let fname = urlstr.lastPathComponent // hogehoge.zip if let csvstrarry = self.LFmanager.getUnZip(fname) { self.getPostNumberArry2CSVArry(csvstrarry) } else { print(" 🟥 == getZip(): NG == zip -> str") } return } guard let url = URL(string: urlstr) else { return } // MARK: === DLするData File downloadData(fromURL: url) { (returnedData) in if let data = returnedData { DispatchQueue.main.async { self.loadCSVzip = data let fname = urlstr.lastPathComponent // hogehoge.zip self.LFmanager.saveLoadData(loaddata: data, fname: fname) // MARK: == Zip -> Data → [String] if let csvstrarry = self.LFmanager.getUnZip(fname) { // MARK: == 既存Zip Fileからのcsv dataの取得 self.getPostNumberArry2CSVArry(csvstrarry) } else { print(" 🟥 == getZip(): NG == zip -> str") } } } else { print ("== 🟥 from web , No data returned.") } } } // == getZip() // MARK: == 既存Zip Fileからのcsv dataの取得 func getPostNumberArry2CSVArry(_ csvstrarry :[String]) { postArry.removeAll() for (idx,csv) in csvstrarry.enumerated() { let csv2 = csv.substringSpaceTrim() if !csv2.isEmpty { // == "\""を削除 let dcsv = csv.replacingOccurrences(of: "\"", with: "") var spritArry:[String] = [] // == ","でCSVから分割しデータ取得 spritArry = dcsv.components(separatedBy: ",") var post_dt = stPostNumber() post_dt.poststr = spritArry[eCSV_DT.ePOSTNUM.rawValue] // 郵便番号 post_dt.tofukenn_h = spritArry[eCSV_DT.eTFKEN_H.rawValue] // 都道府県名 半角カタカナ post_dt.sikuson_h = spritArry[eCSV_DT.eCKTS_H.rawValue] // 市区村名 半角カタカナ post_dt.tyoiki_h = spritArry[eCSV_DT.eMERA_H.rawValue] // 町域 半角カタカナ post_dt.tofukenn_k = spritArry[eCSV_DT.eTFKEN_K.rawValue] // 都道府県名 post_dt.sikuson_k = spritArry[eCSV_DT.eCKTS_K.rawValue] // 市区村名 post_dt.matison_k = spritArry[eCSV_DT.eMERA_K.rawValue] // 町村名 postArry.append(post_dt) } } print("postArry.count =\(postArry.count)") } // == getPostNumberArry |
で、郵便番号DetailViewに検索窓を付けて、postArryから検索したい郵便番号データをsortして表示するのでした。
ではでは。