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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Q&A

解決済

1回答

1052閲覧

変数に型指定をして、何が可能になるかが分からない【 : struct】

kazuki_user

総合スコア147

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

0グッド

1クリップ

投稿2020/09/05 04:03

編集2020/09/05 23:32

: Int: String: DocumentReference!などは分かるのですが、
structの型指定(?)がよく分かりません。

以下、: Categoryはstruntです。

struct Category { var name: String var id: String var imageUrl: String var isActive: Bool = true var timeStamp: Timestamp // 以下省略。

### 1. 変数に型指定をして、何が可能になるかが分からない。
var category : Category!のように、変数に型指定をして何が可能になるかが分からないです。

### 2.

1を理解すれば、2の理解も進むと思うのですが、
下記コードがよく分かっていません????

destination.selectedCategory = category

AddEditProductsVC

1// selectedCategory 2 var selectedCategory : Category! 3 var productToEdit : Product?

destination.productToEdit = selectedProductの意味も、同様に分からない。
(上記の、var productToEdit : Product?が理解できていない。)

## コード

AdminProductsVC

1override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 2 // ②Segueの識別子確認 3 if segue.identifier == Segues.ToAddEditProduct { 4 // ③遷移先ViewControllerの取得 5 if let destination = segue.destination as? AddEditProductsVC { 6 // ④値の設定 7 destination.selectedCategory = category // <---------- 8 destination.productToEdit = selectedProduct // <---------- 9 } 10 } 11 }

## 追記コード1

AddEditCategoryVC

1var categoryToEdit : Category?

AddEditCategoryVC

1if let category = categoryToEdit { 2 nameTxt.text = category.name 3 addBtn.setTitle("Save Changed", for: .normal) 4 5 if let url = URL(string: category.imageUrl) { 6 categoryImg.kf.setImage(with: url) 7 categoryImg.contentMode = .scaleAspectFill 8 } 9 }

## 追記コード2

import UIKit class AddEditProductsVC: UIViewController { var selectedCategory : Category! var productToEdit : Product? override func viewDidLoad() { super.viewDidLoad() } }

質問は以上です。
お時間あるときに、ご返信頂けましたら幸いです????

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

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

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

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

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

TsukubaDepot

2020/09/05 09:55

これは、ご自身で書かれたコードなのでしょうか。 そうであれば、 var selectedCategory : Category! var productToEdit : Product? とオプショナル型を使い分けている理由はご自身が一番分かっているかと思います。 誰かのコードを参考にしているのであれば、何を参考にされたのか、また遷移先での宣言だけでなく、実際に変数が使われているあたりまでコードを載せていただいた方が説明しやすいかもしれません。
kazuki_user

2020/09/05 13:24 編集

ご返信ありがとうございます。 「##コード」内のprepareメソッドにて、変数selectedCategoryや変数productToEditを使用しています。 尚、このコードはUdemyの「iOS 12: Learn to Code & Build Real iOS 12 Apps in Swift 4.2」コースを参考にしています。
TsukubaDepot

2020/09/05 13:31

まず、 > : Intや: String、: DocumentReference!などは分かるのですが、 とありますが、 > var category : Category!のように、変数に型指定をして何が可能になるかが分からないです。 Int 型や String 型の変数(それぞれの型のインスタンスを代入できる変数)を作るのと同じく、Category型の変数を作っているだけなので、考え方としては何ら変わりはありません。 直前のコメントですが、 > 「##コード」内のprepareメソッドにて、変数selectedCategoryや変数productToEditを使用しています。 というのは、最初からご提示いただいているコードを見ればわかるのですが、問題は遷移先のクラスでどのように使われているのか、ということです。 疑問に思われていることの本質が掴みかねているのですが、もし、「片方は ! のオプショナル型、もう一つは ? のオプショナル型とそれぞれ違うオプショナル型で宣言されている理由を知りたい」ということであれば、それは遷移先で具体的にどのような操作をしているのか見てみないことには判断できないと思っています(もちろん、それぞれのオプショナル型は振る舞いが違うため、ある程度予想して答えることは可能ですが、それが求めていることと違う可能性もありますので)。
kazuki_user

2020/09/05 23:39 編集

返信遅れてしまい、すみません。 お時間あるときに、ご返信頂けましたら幸いです。????‍♂️ > それぞれの型のインスタンスを代入できる 構造体Category内の変数などを、別ファイルから使用できるという事でしょうか。 「category.name」で構造体Category内の変数nameへの参照(?)が可能になる、という事でしょうか。(追記コード1) > 遷移先のクラスでどのように使われているのか AddEditProductsVCの事でしょうか? それでしたら、未だほとんど記述していません。(追記コード2)
ozwk

2020/09/06 00:50

DocumentReferenceがわかるならCategoryもわかりそうなものですが DocumentReferenceの場合は何だとおもってますか?
kazuki_user

2020/09/06 02:41

DocumentReferenceの性質・能力を使える(?)のような浅い認識でしかないかも知れません..???? 認識の誤りがありましたら、ご指摘頂けると嬉しいです。
TsukubaDepot

2020/09/06 02:49

> iOS 12: Learn to Code & Build Real iOS 12 Apps in Swift 4.2 Udemy の上記のコースであれば 「Intermediate Swift」のセクションで Swift Optionals Classes Classes are one of the building blocks of your application, learn how to use them in this lesson Class Initializers Computed Properties and Observers Structures Class v Struct When to use class or structure articles Inheritance Enumerations とそれなりに説明してあるようですから、それらも参考になさるといいかと思います。
TsukubaDepot

2020/09/06 02:50

ちなみに、「値渡し」については、 「Good Eatins」セクションの Passing Data in PrepareForSegue A common requirement is to pass data from one VC to another. Learn how to do that here. で説明されているはずです。タイトルと概要からの判断です。
kazuki_user

2020/09/06 06:50

ご指摘ありがとうございます???? 参考にさせて頂きます。
guest

回答1

0

ベストアンサー

コメントから移動。

それぞれの型のインスタンスを代入できる

構造体Category内の変数などを、別ファイルから使用できるという事でしょうか。
「category.name」で構造体Category内の変数nameへの参照(?)が可能になる、という事でしょうか。(追記コード1)

別ファイルから使用できる、ということではなく、構造体を使って新しい型を定義しているということです。

この辺りは、アプリを作る以上に Swift の言語としての基本となりますから、きちんとした言語参考書を使って抑えておいた方がいいかと思います。

以下、The Swift Programming Language - Swift 5.3 より

遷移先のクラスでどのように使われているのか

AddEditProductsVCの事でしょうか?
それでしたら、未だほとんど記述していません。(追記コード2)

この辺りのことは、「値渡し」というキーワードを使って検索すれば、参考になる記事は見つかるかと思います。

投稿2020/09/06 02:45

TsukubaDepot

総合スコア5086

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問