Avatar
Kishikawa Katsumi 3/20/2020 5:36 PM
https://docs.swift.org/swift-book/LanguageGuide/Properties.html# ^ 参考にできるドキュメントとしては上記のPropertiesを読むと良いです。 Swiftは同じ意味でも省略が可能だったりして記述が異なる場合があり、今回のケースで理解に悩まれているのは省略によって別の記法と混同してしまっている、などが原因に見えます。 なのでまずできるだけ省略せずに書いてみます。
5:38 PM
struct CategoryHome: View { var categories: [String: [Landmark]] { get { return Dictionary( grouping: landmarkData, by: { $0.category.rawValue } ) } } var featured: [Landmark] { get { return landmarkData.filter { $0.isFeatured } } } ... }
5:38 PM
^ 省略されている部分を書き足しました。
5:40 PM
このcategories, featured はComputed Propertyと呼ばれるもので、Property(プロパティ、メンバ変数、インスタンス変数)の一種ですが、実際の値を変数に保持しているわけではなく、アクセスがあったときに書かれている処理を実行して動的に値を返すことができる、というものです。
5:42 PM
利用側は let home = CategoryHome() let categories = home.categories このように通常のプロパティと同じようにアクセスしますが、 Computed Propertyはアクセスされたときに書かれている処理(ここでは get { ... } の中カッコの部分)を実行して値を返します。
5:43 PM
詳しくは先のリンクのドキュメントを見ると良いですが、 Computed Propertyはgetset の両方を定義できて、この例ではget の場合だけが定義されています。 (edited)
5:44 PM
このとき、getしかない場合はget { ... } と書くのを省略できて、中カッコだけにできます。 (edited)
5:47 PM
struct CategoryHome: View { var categories: [String: [Landmark]] { return Dictionary( grouping: landmarkData, by: { $0.category.rawValue } ) } ... }
5:48 PM
さらに、処理がreturn 文1行しかない場合はreturnを省略できます。(これはComputed Propertyだけでなくメソッドやfunction、クロージャでも当てはまります。)
5:49 PM
struct CategoryHome: View { var categories: [String: [Landmark]] { Dictionary( grouping: landmarkData, by: { $0.category.rawValue } ) } ... }
5:49 PM
^ return まで省略すると、最初の例と同じになります。どういう構造の文法で書かれているかわかりましたでしょうか?