回答編集履歴

1

記述を変更

2020/03/20 08:11

投稿

TsukubaDepot
TsukubaDepot

スコア5086

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
- `tutorial`は`String`型ですが、書き込むときは`Any?`型として処理されます。
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さんが引用も含めて詳細に説明されていますから、そちらを再度よく確認されてはいかがでしょうか。