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

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

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

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

2174閲覧

swiftの変数宣言で{}を付けるパターンはどういう方式なんでしょうか?

YosukeNakayama

総合スコア80

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/06/17 10:24

このPagingMenuControllerのサンプルを見ていたところ、
変数宣言後に{}で記述されてあり、
case .All(let content)のところも何をやっているのか分かりませんでした。

普通に宣言して、switchで場合分けしているだけだと思いますが、
どういう目的でこのような処理を書いているのでしょうか?
あと、こういう記述方法はなんという方式でしょうか?

swift 変数 括弧 宣言方法 などとググっても出なかったので質問しました。
初歩的な質問かとおもいますが、よろしくお願いいたします。

https://github.com/kitasuke/PagingMenuController/blob/c9a2a0e20dc967014c9a0971f025b6e896b89067/Example/PagingMenuControllerDemo/RootViewController.swift

swift

1 var options: PagingMenuControllerCustomizable { 2 let options: PagingMenuControllerCustomizable 3 switch self { 4 case .All(let content): 5 switch content { 6 case .Standard: 7 options = PagingMenuOptions1() 8 case .SegmentedControl: 9 options = PagingMenuOptions2() 10 case .Infinite: 11 options = PagingMenuOptions3() 12 } 13 case .MenuView(let content): 14 switch content { 15 case .Underline: 16 options = PagingMenuOptions4() 17 case .RoundRect: 18 options = PagingMenuOptions5() 19 } 20 case .MenuController(let content): 21 switch content { 22 case .Standard: 23 options = PagingMenuOptions6() 24 } 25 } 26 return options 27 } 28 29

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

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

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

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

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

guest

回答1

0

ベストアンサー

switchに関しては以下のサイトの5. 列挙型caseパターンを参考
Swift2のパターンマッチ構文集(ほぼ翻訳)

enumについては以下の付属型enum(Associated Value)を参考
Swiftの列挙型(enum)おさらい

※質問のパターンは更にenumの入れ子になっているので複雑になっていて、上記の合わせ技のような感じです。

どういう目的でこのような処理を書いているのでしょうか?

switch文で状態を定義したenum(この場合はself)を判定して、その状態の中にも複数の状態enumを持っていてそれをswitchで判定している、という感じでしょうか、、、

分かりにくい。

複数の状態の中に更に複数の状態を持たせたい場合ですかね。


swift

1enum A { 2 3 // 状態1 (A1,A2,A3) 4 case A1(value: B) 5 case A2 6 case A3 7 8 // 状態2 (B1,B2,B3) 状態A1の場合 9 enum B { 10 case B1, B2, B3 11 } 12 13 var str: String { 14 let str: String! 15 16 switch self { 17 case .A1(let b): 18 switch b { 19 case .B1: 20 str = "B1" 21 case .B2: 22 str = "B2" 23 case .B3: 24 str = "B3" 25 26 } 27 case A2: 28 str = "A2" 29 case A3: 30 str = "A3" 31 } 32 return str 33 } 34} 35 36 37// AのA1という状態の中のB2という状態で初期化 38var val = A.A1(value: .B2) 39val.str 40//=> "B2"

投稿2016/06/17 11:31

編集2016/06/17 12:19
_Kentarou

総合スコア8490

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

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

YosukeNakayama

2016/06/21 07:25

enumが入れ子になっている状態でしたか、、 enumのプロパティというのも見たことがなかったので、戸惑いました。 enumは複雑なんですね・・ちょっともっといいろコードを読んでみます。ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問