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

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

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

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

Q&A

解決済

2回答

1179閲覧

swiftのプロパティの定義の仕方について

Yuya4

総合スコア25

Swift

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

3グッド

3クリップ

投稿2019/06/13 11:33

SwiftUIのチュートリアルを試していると、以下のようなプロパティの定義に遭遇しました。
これはなんといった文法なのでしょうか?
ぱっと見コンピューテッドプロパティかと思いましたが、getterとsetterの記述はないし、、、
ググろうにも何と調べればいいかわからず困っています。

var locationCoordinate: CLLocationCoordinate2D { CLLocationCoordinate2D(latitude: coordinates.latitude, longitude: coordinates.longtitude) }
miyabi_pudding, xenbeat, A2wwM👍を押しています

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

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

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

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

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

miyabi_takatsuk

2019/06/13 14:13

print(locationCoordinate) ってやって、どんな変数の状態になっているかは、確認してみましたか?
guest

回答2

0

これはなんといった文法なのでしょうか?

ぱっと見コンピューテッドプロパティかと思いましたが、getterとsetterの記述はないし、、、

コンピューテッドプロパティで合ってますよ。
コンピューテッドプロパティはgetterの定義は必須ですが、setterの定義は任意です。
またsetterを定義しない場合はget {}を省略してgetterを定義できるようになっています。

ググろうにも何と調べればいいかわからず困っています。

正式にはRead-Only Computed Propertiesと定義されています。
https://docs.swift.org/swift-book/LanguageGuide/Properties.html#ID261

追記

もし「なぜgetterでreturnしなくても良いのか」という点について疑問をお持ちなのであれば
takabosoftさんが提示されているソースの通りで、Swift5.1から新しく追加されたものです。

メインの回答ではそれについて触れませんでしたが、それについては上記でご紹介した公式ドキュメントにも記載されてますので合わせてご確認ください。
https://docs.swift.org/swift-book/LanguageGuide/Properties.html#ID608

Omitting the return from a getter follows the same rules as omitting return from a function, as described in Functions With an Implicit Return.

投稿2019/06/13 20:48

編集2019/06/14 02:15
xenbeat

総合スコア4258

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

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

Yuya4

2019/06/14 03:22

setterの定義が任意なのは知っていましたが、getterも省略できることは知りませんでした。。 ありがとうございます! また、returnの省略についてもリンク載せていただいて助かります!
guest

0

ベストアンサー

私も同じように疑問に思いました。

たぶん次期Swift(5.1?)でそもそも言語としてのパワーアップが行われ、
SwiftUIはそのパワーアップしたSwiftの仕組みを使っているので混乱をきたしているのだと思います。

コンピューテッドプロパティはSwiftの過去のバージョンでも get {}を省略した場合はgetterとして動作していました。

var hoge: Int { return 10 } // 過去のSwiftでもコンパイル可能→getterとして動作

Swift5.1は更に以下のようにreturnが省略可能になったのだと予想されます。

var hoge: Int { 10 }


追記:

たぶんこれです。
Implicit returns from single-expression functions
https://github.com/apple/swift-evolution/blob/master/proposals/0255-omit-return.md

投稿2019/06/14 01:37

編集2019/06/14 01:40
takabosoft

総合スコア8356

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

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

miyabi_takatsuk

2019/06/14 01:40

横槍失礼します。 > Swift5.1は更に以下のようにreturnが省略可能になったのだと予想されます。 これマジですか。 つまり、ブロック内に、処理一つだけだと、return省略可、みたいな感じでしょうか?
takabosoft

2019/06/14 01:40

ソースありましたので追記しました。
takabosoft

2019/06/14 01:41

今までmap { ... } とかはreturn文省略できてましたもんね、その流れなのかなと。
miyabi_takatsuk

2019/06/14 01:42

ありがとうございます! 大変勉強になりました! Yuya4さん、takabosoftさん、横槍失礼しました 汗
miyabi_takatsuk

2019/06/14 01:49 編集

ですね、本質問の調査するために、 Xcodeにて、同じような形式で書いたら、エラーが出てしまいましたので、 なんか違うのかなーと思ってたら、 少し未来の書き方だったのですね・・・。 ドキュメント拝見しましたが、ブロックの最後の処理の、値のみか、値を返してる処理は、 returnしてるとみなす、って感じっぽいですね。
takabosoft

2019/06/14 01:48

ですねー。特にSwiftUIのチュートリアルはとても充実しているのですが、Swift5.1の新しい構文に関するフォローがほとんど無いので、「なんでこういう書き方になるのか?」という部分については各自で調べる必要がでているのが実情かなと思われます。
miyabi_takatsuk

2019/06/14 01:54

> 「なんでこういう書き方になるのか?」という部分については各自で調べる必要がでているのが実情かなと思われます。 さすが某リンゴ社ww ちょっと、最近は特にデバイスのOS含め、Swiftのアップデート頻度が激しいので、油断できませんね・・・。
Yuya4

2019/06/14 03:13

takabosoftさん、miyabi_takatsukさんありがとうございます! いい勉強になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問