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

回答編集履歴

1

URL型の扱いについて追記しました。

2024/02/14 14:38

投稿

退会済みユーザー
answer CHANGED
@@ -12,3 +12,47 @@
12
12
   そのほかの項目(料理名、調理時間など)の項目は削除した状態で
13
13
   該当のソースコードをご記載いただけますと読みやすいかなと思いました。
14
14
  *Menuエンティティの定義もご記載いただけますとより問題が把握しやすいかなと思いました。
15
+
16
+
17
+ ### 追記です。
18
+
19
+ コメントありがとうございます。
20
+ 原因がわかったようでよかったです。
21
+
22
+
23
+ > ・attributeでURL型が選択できない
24
+
25
+ URLはURIの部分集合らしいですので、
26
+ AttributeのTypeにURIを指定すると
27
+ SwiftのソースコードからはURL?型として使うことができるみたいですね。
28
+
29
+
30
+ > ・一方108行目ではBinding<URL?>型を代入しなくてはならない
31
+
32
+ 1点目の対処でもう不要になるかもしれませんが、
33
+ URL型が使いづらい場合は、
34
+ extensionでString型をURL型に変換してくれるような
35
+ [Computed Properties](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/properties/#Computed-Properties) を作成するのも良いかもしれませんね。
36
+
37
+ ```swift
38
+ extension Menu {
39
+ var selectedVideoURLString: String {
40
+ get {
41
+ selectedVideoURL?.absoluteString ?? ""
42
+ }
43
+ set {
44
+ selectedVideoURL = URL(string: newValue)
45
+ }
46
+ }
47
+ }
48
+
49
+ // getの使い方
50
+ Text(selectedRecipe.selectedVideoURLString)
51
+ // setの使い方
52
+ selectedRecipe.selectedVideoURLString = "https://tenki.jp/forecast/3/"
53
+ ```
54
+
55
+ *後から気づきましたが、例が逆かもしれませんね・・
56
+  エンティティはString型でComputed PropertiesはURL型
57
+  という記述の方が質問に対する回答として適切でしたね・・
58
+  (selectedVideoURLはURL型の前提で記述してしまいました・・)