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

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

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

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

Swift

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

Q&A

解決済

2回答

469閲覧

変数・定数を宣言するときの、「:」「=」の違い。

kazuki_user

総合スコア147

iOS

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

Swift

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

0グッド

0クリップ

投稿2020/09/02 03:24

## 「:」「=」の違い
他のファイルのクラスや構造体を参照するときに、「:」を、
単に代入するときに、「=」を使うのでしょうか。

## コード

var product: Product!

swift

1class ProductsDetailVC: UIViewController { 2 3 // Outlets 4 @IBOutlet weak var productImg: UIImageView! 5 @IBOutlet weak var productTitle: UILabel! 6 @IBOutlet weak var productPrice: UILabel! 7 @IBOutlet weak var productDescription: UILabel! 8 @IBOutlet weak var bgView: UIVisualEffectView! 9 10 // Variable 11 var product: Product! // <----- : 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 16 productTitle.text = product.name 17 productDescription.text = product.productDescription 18 19 if let url = URL(string: product.imageUrl) { 20 productImg.kf.setImage(with: url) 21 } 22 23 let formatter = NumberFormatter() // <----- = 24 formatter.numberStyle = .currency 25 if let price = formatter.string(from: product.price as NSNumber) { 26 productPrice.text = price 27 } 28 29 } 30

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

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

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

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

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

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

guest

回答2

0

ベストアンサー

Swift

1 var product: Product! // <----- :

これが

Swift

1 var product

だけだと、変数の型を確定することができません。変数は準備する段階で型を確定する必要があるため、型指定を行なっています。

もう少し深く突き詰めると、クラスのトップレベルにおける変数(プロパティ)の宣言では、何らか値で初期化するか、イニシャライザで初期値を代入する必要があります。ただし、この段階において product には具体的な値を代入することはできない作りにしているため、Implicitly optional value を用いることで nil を初期値にしています。

もし、Implicitly optional value を用いた初期化に理解が及んでいないようであれば、それは潜在的なバグを招く使いかたですので、理解を深めるか、あるいは初期値として具体的な値(インスタンス)を代入するようにした方がいいかと思います。

Swift

1let formatter = NumberFormatter() // <----- =

これは、

Swift

1let formatter:Formatter = NumberFormatter() // <----- =

と等価です。

原則通りにいけば、変数には型名を指定する必要があります。

ただし、そのようなことをしなくとも、NumberFormatter()Formatter 型を返すことが明確ですので、型指定をする必要はありません(型推論、Type inference)。

むしろ、Swift の流儀としては、代入によって型名が確定することが確実であれば型推論を使い、明示的な型指定は行わないことが推奨されています。

  • [Type inference

](https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html#ID322)

投稿2020/09/02 04:40

編集2020/09/02 04:43
TsukubaDepot

総合スコア5086

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

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

0

他のファイルのクラスや構造体を参照するときに

参照と言うとこの場合は違います。
単純に型指定です。
他ファイルのクラスなどでない、
Int型なども指定できます。
あと、:だけだと、構文によっては、別の用法や意味もありますのでご注意を。

単に代入するときに、「=」を使うのでしょうか。

そうです。
=一個だと、左辺に右辺の値を代入、となります。

投稿2020/09/02 03:46

miyabi_takatsuk

総合スコア9528

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問