

添付した画像のようにSTART画像をタップしたらPAUSE画像に切り替わるようにしたいのですが、できません。

※追記  
xcodeでビルドは通るのですが、START画像をタップしても下記の画像にあるようなPAUSE画像に切り替わりません。START画像をタップしてもタップされた反応として少し色が変わってそのまま動かなくなります。

添付画像はXcodeのstoryboardで作成したデザインです。教材と全く同じによう書いているのですが、どこにミスがあるのか分かりません。ご教授頂ければ幸いです。

[![画像の説明をここに入力](https://i.stack.imgur.com/Frvrk.png)](https://i.stack.imgur.com/Frvrk.png)

コード

[code]

    import UIKit
    
    class ViewController: UIViewController {
    
        //startPause outlet to change the start to the pause image
        //この丸いスタートボタンを動く変数
        @IBOutlet weak var startPauseOutlets: UIButton!
    
        //var to check the state of the startPauseButton to display the correct image
        var startPauseButtonStateCheck = true
    
       // @IBAction func startPausePressed(_ sender: AnyObject) {
       @IBAction func startPausePressed(_ sender: Any) {
           if startPauseButtonStateCheck{
               //教材では最後！だが、？にした方が良いと表示された・・・ので、？にしたら、動かなかったので!でやり直したら、動いた。しかし、結局、?でも動いたので、?で通してみる。
               //下記のif文がおかしいのか、startとpause両方の画像が出ない
               let pause = UIImage(named: "pauseButton") as UIImage?
               startPauseOutlets.setImage(pause, for: .normal)
               startPauseButtonStateCheck = false
           }else{
               let start = UIImage(named: "start") as UIImage?
               startPauseOutlets.setImage(start, for: .normal)
               startPauseButtonStateCheck = true
           }
        }
    }
    
[/code]


CC BY-SA 4.0
2018-06-11T08:44:57.800
44688
2021-01-11T16:08:05.810
2018-06-12T01:57:19.407
27512
27512
question
swift xcode swift4 optional
SWIFTのIF文でタップした画像を他の画像に切り替える処理


Xcodeで、`@IBOutlet weak var startPauseOutlets: UIButton`の左にある○か白丸になっていませんか？

Xcodeでstartとpauseが切り替わるインターフェース設計画面を開き、右上の○が2つ繋がったようなボタンを押し、左側の画面にユーザーインターフェース、右側に対応するソースコードの2画面構成にして下さい。

次に`@IBOutlet weak var startPauseOutlets:
UIButton`の左の○を右クリックし、そのままstart/pauseボタンまでドラッグし、start/pauseボタンの色が変わったところでマウスボタンから手を離します。

すると、`@IBOutlet weak var startPauseOutlets:
UIButton`の横の◯の中に黒い●が描かれた二重丸になると思います。

この状態でプログラムをもう一度ステップ実行してみてください。

`@IBOutlet`というキーワードは、ユーザーインターフェース部品を参照するよという宣言だけなので、どのユーザーインターフェース部品を参照するか？は、

  * 宣言の横の○から参照したいユーザーインターフェース部品と右クリックからのドラッグで接続指定する
  * ユーザーインターフェース部品を右クリックでソースコードまでドラッグし、この部品をどんな変数名でソースコードから参照するか指定する

のどちらかを行わないと、宣言しただけで値は自動では入ってくれません。

`startPauseOutlets`という変数の値が`nil`であると言うことから原因を推測してみましたので、確認してみて下さい。

最後になりますが、一番大事な情報は`startPauseOutlets`という変数の値が`nil`であると言うことで、アプリケーションを操作した結果何が起きたかを質問に追記するよりも、  
デバッグ中に`startPauseOutlets`の中身が`nil`である事の方がプログラミングとしては大事ですので、質問は出来たアプリケーションを操作したが「どう言う風にしか動かない」よりも  
どういうデバッグを行い、原因らしいところが見つかったがどうすればその原因を解消出来るのか？  
という観点から質問して下さると、答えが集まりやすく、より適切なアドバイスがもらえると思います。


CC BY-SA 4.0
2018-06-12T08:32:59.070
44717
2018-06-12T08:32:59.070
14745
44688
answer


返信が大変遅くなってしまい誠に申し訳ございませんでした。どうやら画像の取り込み方に問題があったようです。画像を一旦削除してから貼り直すとちゃんと動きました。


CC BY-SA 4.0
2018-09-14T07:01:15.337
48389
2018-09-14T07:01:15.337
27512
44688
answer