回答編集履歴
1
記述を変更
test
CHANGED
@@ -38,6 +38,10 @@
|
|
38
38
|
|
39
39
|
|
40
40
|
|
41
|
+
---
|
42
|
+
|
43
|
+
|
44
|
+
|
41
45
|
起動時に
|
42
46
|
|
43
47
|
```swift
|
@@ -50,9 +54,31 @@
|
|
50
54
|
|
51
55
|
|
52
56
|
|
53
|
-
|
57
|
+
この`bool(forKey:)`というメソッドは、指定されたキーに紐づいた値に応じて`Bool`値を返すようになっています。
|
54
58
|
|
55
59
|
|
60
|
+
|
61
|
+
[bool(forKey:)](https://developer.apple.com/documentation/foundation/userdefaults/1416388-bool)
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
ドキュメントを読むと、
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
> This method automatically coerces certain ”truthy” values—such as the strings "true", "YES", and "1", and the numbers 1 and 1.0—to the Boolean value true. The same is true for certain ”falsy” values—such as the strings "false", "NO", and "0", and the numbers 0 and 0.0—which are automatically coerced to the Boolean value false.
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
とありました。
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
つまり、書き込み時に`"true"`や`"1"`あるいは数値型の'1'など、”真”として処理できる値が書き込んであれば`true`として扱いますが、それ以外だと`false`という扱いになってしまします。
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
一方、書き込み時は
|
56
82
|
|
57
83
|
```swift
|
58
84
|
|
@@ -60,24 +86,16 @@
|
|
60
86
|
|
61
87
|
UserDefaults.standard.set(tutorial, forKey: "tutorialShown")
|
62
88
|
|
89
|
+
}else{
|
90
|
+
|
63
91
|
```
|
92
|
+
|
93
|
+
と文字型で書き込んでいます。なので、`bool(forKey:)`というメソッドで読み込むと`false`という結果しか得られないということになります。
|
64
94
|
|
65
95
|
|
66
96
|
|
67
|
-
`
|
97
|
+
質問者さんの先日の質問を拝見したところ、`Bool`型での処理を提案されていましたので、ここでは`Bool`型での読み書きに統一することをお勧めします。
|
68
98
|
|
69
99
|
|
70
100
|
|
71
|
-
つまり、書き込むときには`Any?`型、読み込むときには`Bool`型として処理しようとしていますから、型が一致せず思ったとおりの動作をしていないと考えられます。
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
ちなみに、`Any?`型で記録された`"初期値"`という値を`Bool`型で読み込むと、常に`false`という結果となるため、常に初期画面が表示されてしまいます。
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
読み書きの型を一致させれば良いのですが、質問者さんの先日の質問を拝見したところ、`Bool`型での処理を提案されていましたので、ここでは`Bool`型での読み書きに統一することをお勧めします。
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
また、先日の質問ではhoshi-takanoriさんが詳細に説明されていますから、そちらを再度よく確認されてはいかがでしょうか。
|
101
|
+
また、先日の質問ではhoshi-takanoriさんが引用も含めて詳細に説明されていますから、そちらを再度よく確認されてはいかがでしょうか。
|