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

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

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

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

Q&A

解決済

2回答

971閲覧

初歩的なところで質問があります。

OtoMura

総合スコア22

Swift

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

0グッド

0クリップ

投稿2020/03/28 10:02

初歩的な所ですみません
サイトなどで調べましたがしっかりと理解が出来ませんでした。

var num: Int = 3 var str = String(num) print(str)

var num に3を入れた
2番目の文でそれをまた strに入れてプリントするのがわかりません。

お願いします。

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

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

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

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

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

OtoMura

2020/03/29 00:52

わざわざありがとうございます。 このサイトから見ました。
guest

回答2

0

ベストアンサー

質問者さんが示されたコードを実行しただけだと、たしかに疑問におもうかもしれません。
仮に次のようにコードを書き換えたとします。

swift

1var num: Int = 3 2print(num) 3var str = String(num) 4print(str)

しかし、表示は次のようになると思います。

3 3

同じ3という表示であれば、わざわざ別の変数に入れる必要はないと考えるのも自然かもしれませんし、たしかにその必要はありません。

しかし、1回目の3Int型の3ですし、2回目の3String型の3です。
型が違うので、表示は一見同じでも、内部での扱いは異なってきます。

質問者さんの質問経歴を見ると、ArduinoでC言語などを使ったプログラムを既に作られているようですね。C言語でもこれは同じことなのである程度は納得のゆくことではないでしょうか。

質問者さんがどのような流れで質問に挙げられたコードに出会ったのかはわかりませんが、もし何かの資料を見て疑問におもわれたのであれば、その背景を説明してもらった方がより適切な回答ができると思います。

投稿2020/03/28 13:09

TsukubaDepot

総合スコア5086

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

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

OtoMura

2020/03/29 00:40

回答ありがとうございます。 最近アプリ開発をし始めてやりたいことをしようとすると基本的なことでぶつかってしまい、しっかりと理解が出来なかったので初めからしっかりと理解してやっていこうと思い、質問させて頂きました。 今までArduinoばかりやっていてクラスに入れることやnilを使うこと、ラップ、アンラップなどの必要性がよく分りませんでした。 このプログラムは初心者にswiftの大まかなプログラムの文法を説明するというサイトで見つけたもので細かな説明がなかったので質問をしました。 このプログラムでは値が3なので特に変化がないということでいいですか? そうするとどういう場合に変化があるのか教えて貰えると嬉しいです。 勝手な予想ですがstring型?なので文字とかを入れる感じですか?
TsukubaDepot

2020/03/29 01:10

> このプログラムでは値が3なので特に変化がないということでいいですか? 表示結果の見た目の違いはありませんが、「型」の違いはあります。 var str = String(num) この行ですが、String型の変数strに、Int型のnumという変数を、String型のイニシャライザを使って代入している行です。 さらに、Swiftには型推論という機能があり、代入される型が明確であれば、その型は宣言では書かなくていいという決まりがあります。 つまり、端折った部分を書くとこのようになります。 var str: String = String(num) 本当は String(num) は「引数を取るイニシャライザ」であり、C言語でいう関数とはまた違うのですが、今はInt型の変数が引数として渡されればString型に変換される、と覚えておくのがいいかもしれません。 > 最近アプリ開発をし始めてやりたいことをしようとすると基本的なことでぶつかってしまい、しっかりと理解が出来なかったので初めからしっかりと理解してやっていこうと思い、質問させて頂きました。 ネットの記述は便利なのですが、断片的な情報もおおく、また必ずしも正確ではないことが多いので、できればきちんと体系づけて説明してある書籍などを利用するのがいいのではないかと思います。参考にされているQiitaのページを拝見しましたが、言葉遣いなどがちょっと怪しいのであまり参考にはならないかもしれませんし、そのページに書かれている言葉で理解すると、他のページをみたときにさらに壁にぶつかる可能性があるとおもいます(たとえば、「数値を文字列にパースする」とありますが、例で示しているのは「変換」であり、「パース」とは異なります)。
TsukubaDepot

2020/03/29 01:18

たぶん、Qiitaのページを参考にするよりも、「A Swift tour」をみた方がより正確に書かれていますし、最初のページに質問者さんが疑問に思っていることへの答えが正確に記述してあります。 https://docs.swift.org/swift-book/GuidedTour/GuidedTour.html# これは、Swiftの公式ドキュメントですから、これに勝るものはないと思います。 英語のドキュメントですが、試しにGoogle翻訳にかけてみて読んでみました。 途中、頓珍漢な変換を行っている場所もありますが、全体的には概ね意味が通るような翻訳結果になっているようです。 https://translate.google.com/translate?client=firefox-b-d&client=tw-ob&sxsrf=ALeKk00T14kPZmOzE25G_p3hR56WFSi0sw%3A1585444358727&gs_lcp=CgZwc3ktYWIQAzoECCMQJzoGCAAQBxAeOgYIABAEECU6BAgAEB46CAgAEAQQChAeOgUIABCDAToGCAAQBBAeOggIABAFEAQQHjoICAAQBBAlECA6BggAEAUQHjoFCCEQoAFQ5n1YjKsBYOCtAWgAcAB4AIABmgGIAf4SkgEFMTIuMTKYAQCgAQGqAQdnd3Mtd2l6&uact=5&um=1&ie=UTF-8&hl=ja&sl=en&tl=ja&u=https%3A%2F%2Fdocs.swift.org%2Fswift-book%2FGuidedTour%2FGuidedTour.html%23
OtoMura

2020/03/29 01:39

なるほど!! イニシャライザがわからなかったので調べてみたのですが初期化ということみたいですね。 String型のイニシャライザを使って代入している行です。 ここが少しわからないです。おそらくですがString型、文字型で初期化?してるということでしょうか。そうするとなぜ初期化しているのか分かりません。 今はInt型の変数が引数として渡されればString型に変換される ここは何となく分かりました。 C言語とは関数の扱いが少し違うという感じで良さそうですか。なぜ関数が出てきたんだ?まぁいっか ご丁寧に本当ありがとうございます。 Arduinoも今まで独学で勉強してきたので今回も大丈夫だろうと始めたのですか基礎からして少しズレている感じがしてここ2週間頭を抱えていました。いちよう本も以前買ったものが2冊あるのですがそれでもわからない事が多くネットで調べていました。 始めたばかりで何が正しいのか分からない中間違った情報を理解してしまうと後々大変になってしまいそうなので気をつけてネットを使うようにします。 丁寧に本当ありがとうございました。
OtoMura

2020/03/29 01:41

おおおおおーー 凄そうです。 ありがとうございます。
TsukubaDepot

2020/03/29 01:59

> ここが少しわからないです。おそらくですがString型、文字型で初期化?してるということでしょうか。そうするとなぜ初期化しているのか分かりません。 2という数値から、String型の"2"というインスタンス(他の言語だとオブジェクトという言い方もありそうです)を作っていると言えると思います。 たとえば、 var str = String(num) は var str = String.init(num) と同じなので、このようにPlaygroundなどで入力し、initのところでoptionを押しながらクリックすると、英語ですがきちんとした説明が出てきます。 きちんと理解しようとすると LosslessStringConvertible というプロトコルまで理解しなければなりませんが、それはとりあえず置いておきましょう。 すると、説明は「Creates an instance from the description of a given instance.」となります。技術英語としての適切な表現を無視しかなり意訳すると、「与えられたインスタンスの表現に適したインスタンスを作る」という感じになります。 どういうことかと言うと、2という数値が与えられれば"2"という文字列、3.14という数値が与えられれば"3.14"という文字列がインスタンスとして作られる、という意味です。 なぜ初期化が必要なのか、ということですが、Int型からString型へ変換しているということは、いわゆる「型に適した入れ物」を作り直しているからです。これはSwiftで特別なことではなく、C言語でも同じです。
OtoMura

2020/03/29 02:23

なるほどつまり初めに説明してくださったように値を数字として扱うか、文字として扱うかを初期化することで適した入れ物にしてるということですね! そうすると確かにあのサイトだと正しく理解するのは難しそうですね。 ご丁寧に細かなとこまで教えて頂きありがとうございした。 これからも教えて頂けると嬉しいです!
guest

0

そんでいいんじゃないでしょうか。
何か不具合があるんでしょうか

投稿2020/03/28 11:51

y_waiwai

総合スコア87719

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

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

OtoMura

2020/03/29 00:43

回答ありがとうございます。 どんでいいのか教えて頂いてもいいですか。 始めたばかりで分からない事が多く、値を2回入れる理由が分かりません。 お願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問