teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

修正

2018/05/05 01:45

投稿

_Kentarou
_Kentarou

スコア8490

answer CHANGED
@@ -6,4 +6,87 @@
6
6
 
7
7
  timeArray.sort()
8
8
  // timeArray => ["00.23", "01.23", "01.55", "03.45", "05.05"]
9
+ ```
10
+
11
+ 以下回答追記
12
+ ---
13
+
14
+ 情報を分けた配列で持つのは大変なので、一つの案として`UserDefaults`に保存できるクラスにしてみるのはどうでしょう?
15
+ ※ 数が多くなるようであれば`DB`の使用なども考えた方がよいと思いますが。
16
+ 古いですが参考URL: [Swiftオブジェクトの配列をNSUserDefaultsに保存する](https://qiita.com/paming/items/a93b8572f65275eb1dd4)
17
+
18
+ ```swift
19
+ import UIKit
20
+
21
+ class ViewController: UIViewController {
22
+
23
+ override func viewDidLoad() {
24
+ super.viewDidLoad()
25
+
26
+ let item1 = Item(time: "01.55", date: "2018/05/05", compareTime: 01.55)
27
+ let item2 = Item(time: "01.23", date: "2018/05/04", compareTime: 1.23)
28
+ let item3 = Item(time: "00.23", date: "2018/05/06", compareTime: 0.23)
29
+ let saveItems = [item1, item2, item3]
30
+
31
+ // 保存
32
+ let userDefaults = UserDefaults.standard
33
+ let archivedObject = NSKeyedArchiver.archivedData(withRootObject: saveItems)
34
+ userDefaults.set(archivedObject, forKey: "ItemSaveKey")
35
+ userDefaults.synchronize()
36
+
37
+ // 取得
38
+ var resultItems: [Item] = []
39
+ if let itemData = userDefaults.object(forKey: "ItemSaveKey") as? Data,
40
+ let getItems = NSKeyedUnarchiver.unarchiveObject(with: itemData) as? [Item] {
41
+
42
+ // ソート
43
+ resultItems = getItems.sorted{ $0.time < $1.time }
44
+ }
45
+
46
+ // resultItems => [Item(time: "00.23", date: "2018/05/06", compareTime: 0.23),
47
+ // Item(time: "01.23", date: "2018/05/04", compareTime: 1.23),
48
+ // Item(time: "01.55", date: "2018/05/05", compareTime: 01.55)]
49
+ }
50
+ }
51
+
52
+
53
+ class Item: NSObject, NSCoding {
54
+
55
+ enum ItemKey: String {
56
+ case itemTimeKey
57
+ case itemDateKey
58
+ case itemCompareTimeKey
59
+ }
60
+
61
+ /// タイム表示用
62
+ var time: String
63
+ /// 日付
64
+ var date: String
65
+ /// タイム比較用
66
+ var compareTime: Double
67
+
68
+ init(time: String, date: String, compareTime: Double) {
69
+ self.time = time
70
+ self.date = date
71
+ self.compareTime = compareTime
72
+ }
73
+
74
+ required init?(coder aDecoder: NSCoder) {
75
+ guard let time = aDecoder.decodeObject(forKey: Item.ItemKey.itemTimeKey.rawValue) as? String,
76
+ let date = aDecoder.decodeObject(forKey: Item.ItemKey.itemDateKey.rawValue) as? String else {
77
+ return nil
78
+ }
79
+ self.time = time
80
+ self.date = date
81
+ self.compareTime = aDecoder.decodeDouble(forKey: Item.ItemKey.itemCompareTimeKey.rawValue)
82
+ }
83
+
84
+ func encode(with aCoder: NSCoder) {
85
+ aCoder.encode(time, forKey: Item.ItemKey.itemTimeKey.rawValue)
86
+ aCoder.encode(date, forKey: Item.ItemKey.itemDateKey.rawValue)
87
+ aCoder.encode(compareTime, forKey: Item.ItemKey.itemCompareTimeKey.rawValue)
88
+ }
89
+ }
90
+
91
+
9
92
  ```

1

修正

2018/05/05 01:45

投稿

_Kentarou
_Kentarou

スコア8490

answer CHANGED
@@ -1,4 +1,4 @@
1
- 文字列で時間を配列で保持していると思いますので、配列を以下の用にソートしてみてください。
1
+ 文字列(タイム)を配列で保持していると思いますので、配列を以下の用にソートしてみてください。
2
2
 
3
3
  ```swift
4
4
  // ↓ 例にあった時間の配列