質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

888閲覧

init()の{body}を省略できない

15bbtr135tr16wr

総合スコア1

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/07/20 06:07

編集2021/07/20 07:59

init()の宣言の下の{}を省略する方法

イニシャライザを変数宣言を簡略化するために用いようとして、構造体の中にイニシャライザを宣言しました。
しかし**{body}**が必要だという以下のようなエラーメッセージが出ます。

エラーメッセージ

Error Message

以下のSwiftUIのコードを模範にしてイニシャライザを宣言しました。

###OutlineGroup()の宣言の確認方法
イメージ説明
OutlineGroupを宣言してJump to Definitionを選択するとソースコードを確認できます。

###OutlineGroup()の抜粋

Swift

1public struct OutlineGroup<Data, ID, Parent, Leaf, Subgroup> where Data : RandomAccessCollection, ID : Hashable { 2} 3 4extension OutlineGroup where ID == Data.Element.ID, Parent : View, Parent == Leaf, Subgroup == DisclosureGroup<Parent, OutlineSubgroupChildren>, Data.Element : Identifiable { 5 6public init<DataElement>(_ root: DataElement, children: KeyPath<DataElement, Data?>, @ViewBuilder content: @escaping (DataElement) -> Leaf) where ID == DataElement.ID, DataElement : Identifiable, DataElement == Data.Element 7 8public init<DataElement>(_ data: Data, children: KeyPath<DataElement, Data?>, @ViewBuilder content: @escaping (DataElement) -> Leaf) where ID == DataElement.ID, DataElement : Identifiable, DataElement == Data.Element 9}

SwiftUIのコードと比較すると、Genericsに適用するプロトコルの有無が相違点として確認できましたので、Genericsに適用するプロトコルが関係していると考え、主にGenericsについてのswiftのリファレンスを調べましたが明確な答えが分かりませんでした。

変数を簡素化して宣言するのにイニシャライザを用いるのが適切であるか、その場合、上記のようなエラーの解消する方法の解説をお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/07/20 06:25

SwiftUI のソースコードはどこから入手されましたか?
15bbtr135tr16wr

2021/07/20 07:55 編集

ソースコードではないのですね。誤表現で困惑させてしまい申し訳ありませんでした。それらに付随する文章を修正しておきます。
15bbtr135tr16wr

2021/07/20 08:12

自分で記述したコードのinitializer-body は省略不可なのですね。 Jump to Definitionで確認できる関数のbody部分(少なくともOutlineGroupのinitializer-bodyに関して)は省略してあるというような認識でよいのでしょうか?
MasakiHori

2021/07/21 00:11

勘違いしているかもしれないので書いておきます。 Jump to Definitionで表示されるのはGenerated Interfaceというもので、XcodeがライブラリやソースコードからInterface(structの宣言や関数の名前など)だけを抜き出して生成したものです。 ソースコードそのものではありません。
guest

回答1

0

自己解決

initializer-bodyは省略不可です

投稿2021/07/20 08:03

15bbtr135tr16wr

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問