回答編集履歴
1
記述を変更
answer
CHANGED
@@ -18,25 +18,34 @@
|
|
18
18
|
```
|
19
19
|
と修正すればご希望の動作をすると思います。
|
20
20
|
|
21
|
+
---
|
22
|
+
|
21
23
|
起動時に
|
22
24
|
```swift
|
23
25
|
if UserDefaults.standard.bool(forKey: "tutorialShown") == false{
|
24
26
|
```
|
25
27
|
という行で`"tutorialShown"`というキーに紐づいた値を `Bool`値で調べています。
|
26
28
|
|
27
|
-
|
29
|
+
この`bool(forKey:)`というメソッドは、指定されたキーに紐づいた値に応じて`Bool`値を返すようになっています。
|
28
30
|
|
31
|
+
[bool(forKey:)](https://developer.apple.com/documentation/foundation/userdefaults/1416388-bool)
|
32
|
+
|
33
|
+
ドキュメントを読むと、
|
34
|
+
|
35
|
+
> 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.
|
36
|
+
|
37
|
+
とありました。
|
38
|
+
|
39
|
+
つまり、書き込み時に`"true"`や`"1"`あるいは数値型の'1'など、”真”として処理できる値が書き込んであれば`true`として扱いますが、それ以外だと`false`という扱いになってしまします。
|
40
|
+
|
41
|
+
一方、書き込み時は
|
29
42
|
```swift
|
30
43
|
let tutorial = "初期値"
|
31
44
|
UserDefaults.standard.set(tutorial, forKey: "tutorialShown")
|
45
|
+
}else{
|
32
46
|
```
|
47
|
+
と文字型で書き込んでいます。なので、`bool(forKey:)`というメソッドで読み込むと`false`という結果しか得られないということになります。
|
33
48
|
|
34
|
-
`
|
49
|
+
質問者さんの先日の質問を拝見したところ、`Bool`型での処理を提案されていましたので、ここでは`Bool`型での読み書きに統一することをお勧めします。
|
35
50
|
|
36
|
-
つまり、書き込むときには`Any?`型、読み込むときには`Bool`型として処理しようとしていますから、型が一致せず思ったとおりの動作をしていないと考えられます。
|
37
|
-
|
38
|
-
ちなみに、`Any?`型で記録された`"初期値"`という値を`Bool`型で読み込むと、常に`false`という結果となるため、常に初期画面が表示されてしまいます。
|
39
|
-
|
40
|
-
読み書きの型を一致させれば良いのですが、質問者さんの先日の質問を拝見したところ、`Bool`型での処理を提案されていましたので、ここでは`Bool`型での読み書きに統一することをお勧めします。
|
41
|
-
|
42
|
-
また、先日の質問ではhoshi-takanoriさんが詳細に説明されていますから、そちらを再度よく確認されてはいかがでしょうか。
|
51
|
+
また、先日の質問ではhoshi-takanoriさんが引用も含めて詳細に説明されていますから、そちらを再度よく確認されてはいかがでしょうか。
|