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

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

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

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

Q&A

解決済

1回答

2107閲覧

アンダーバーの使い方

taiseiswift

総合スコア20

Swift

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

0グッド

0クリップ

投稿2019/02/02 15:33

ある教本のタイマーアプリを作っています。
画面遷移時に最後のviewDidAppearでアンダーバーにdisplayUpdateの戻り値を代入するのは何故ですか?

swift

1import UIKit 2 3class ViewController: UIViewController { 4 //タイマーの変数を作成 5 var timer: Timer? 6 //カウントの変数を作成 7 var count = 0 8 //設定値を扱うキーを設定 9 let settingKey = "timer_value" 10 11 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 // Do any additional setup after loading the view, typically from a nib. 16 // UserDefaultsのインスタンス化 17 let settings = UserDefaults.standard 18 // UserDefaultsに初期値を登録 19 settings.register(defaults: [settingKey : 10]) 20 } 21 22 @IBOutlet weak var countDownLabel: UILabel! 23 24 @IBAction func SettingButtonAction(_ sender: Any) { 25 performSegue(withIdentifier: "goSetting", sender: nil) 26 } 27 28 @IBAction func startButtonAction(_ sender: Any) { 29 // timerをアンラップしてnowTimerに代入 30 if let nowTimer = timer { 31 // もしタイマーが、実行中だったらスタートしない 32 if nowTimer.isValid == true { 33 // 何も処理しない 34 return 35 } 36 } 37 38 // タイマーをスタート 39 timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(self.timerInterrupt(_:)), userInfo: nil, repeats: true) 40 } 41 42 @IBAction func stopButtonAction(_ sender: Any) { 43 if let nowTimer = timer { 44 if nowTimer.isValid == true { 45 nowTimer.invalidate() 46 } 47 } 48 } 49 50 // 画面の更新をする(戻り値: remainCount: 残り時間) 51 func displayUpdate() -> Int { 52 // UserDefaulsのインスタンス化 53 let settings = UserDefaults.standard 54 // 取得した秒数をtimerValueに渡す 55 let timerValue = settings.integer(forKey: settingKey) 56 // 残り時間(remainCount)を生成 57 let remainCount = timerValue - count 58 // remainCount(残り時間)えをラベルに表示 59 countDownLabel.text = "残り(remainCount)秒" 60 // 残り時間を戻り値に設定 61 return remainCount 62 } 63 // 経過時間の処理 64 @objc func timerInterrupt(_ timer:Timer) { 65 // count(経過時間)に+1していく 66 count += 1; 67 // remainCount(残り時間)が0以下のとき、タイマーを止める 68 if displayUpdate() <= 0 { 69 // 初期化処理 70 count = 0 71 // タイマー停止 72 timer.invalidate() 73 } 74 } 75 // 画面切り替えのタイミングで処理を行う 76 override func viewDidAppear(_ animated: Bool) { 77     // カウントを0にする 78 count = 0 79 // タイマーの表示を更新する 80 _ = displayUpdate() 81 } 82 83}

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

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

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

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

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

guest

回答1

0

ベストアンサー

swift

1let num = displayUpdate()

すると警告が出るので(numは何に使うのよっていう)

警告がでないアンダーバーにしていると思います。

swift

1_ = displayUpdate()

ここで_ にしている意図は作者さんでないとわからないかもですが予想でいくつか、

・あとでここに変数入れて使うつもりだが、今はまだしない。変数にしとくと警告出るのでアンダーバーに
・displayUpdateの中の処理を行いたいけどIntにしたから何かに代入しないと。でも代入すると警告出るのでアンダーバーに

( ・ὢ・ ) この回答で大丈夫でしょうか?

投稿2019/02/02 17:42

sachiko-kame

総合スコア334

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

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

taiseiswift

2019/02/03 02:19

この後もアンダーバーのままでした。 何故displayUpdateの処理を行うには戻り値を代入しなければいけないのですか? 分かりづらくてすいません...
sachiko-kame

2019/02/03 03:17

displayUpdateは戻り値でInt(1,3, 6とか)を返すように作成されているからなんですよね。 何も返さなければ代入するという書き方はいらないのですが、何か代入する書き方なら代入するといった書き方にしないと処理を行ってくれないんですよね。(o*。_。)o しかし、代入するものがないので、何もしないけどっていうアンダーバーの形になっちゃうんでよね。 こちらこそうまく説明できないのごめんなさい(o*。_。)o
taiseiswift

2019/02/03 07:45

返信ありがとうございますm(_ _)m 戻り値があるメソッドは必ず何かに代入しないと処理をしてくれないということですか?
sachiko-kame

2019/02/03 08:12

すみません汗 勘違いしていました。 本当ごめんなさい汗。 displayUpdate()だけの記述だと、Int返しているのに、それを使っていないよという警告だけでした。 なのでどうしても使わないを明示するのに _ = displayUpdate()という書き方が必要みたいです。 でないと警告が出るという…。 警告があるといやだからその書き方になるのかなという感じかと思います。 displayUpdate()だと普通に関数実行にみえてしまうので…。 xcodeも 『これInt返しているのにこれじゃ使ってないよ?いいの?』 を言ってしまうんですね。 『ここではこの中身だけで返ってくるIntは使わないの!』 をいうためにどうしても _ = displayUpdate()の書き方になってしまう感じみたいです。
taiseiswift

2019/02/03 08:23

なるほど! 理解できました! ありがとうございます!!
sachiko-kame

2019/02/03 08:30

こちらこそありがとうございます。(>ω<) 間違って認識していたのに気づけました。汗
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問