2017-01-11 7 views
1

私はSwiftには新しく、Xcodeでコーディングしています。私は "こんにちは、世界!"のようにやろうとしています。 Swiftでは、1つの画面、1つのボタン、1つの表示ラベルであるアプリを持つことで、スウィフトワンボタン3つのメッセージ

私の目的は、ボタンをクリックして3つの異なるメッセージを表示させることです。明確にするために、ボタンをクリックするたびにメッセージが順番に表示されます。

が、私はここに私の(未完成の試み)

import UIKit 

class ViewController: UIViewController { 
    @IBOutlet weak var textBox: UILabel! 

    var userTapped = false 

    @IBAction func tappedMe(_ sender: UIButton) { 
     let me = 
     if userTapped { 
      switch me { 
      case me : textBox.text = "Hello, World!" 
      case me : textBox.text = "Hello, Human!" 
      case me : textBox.text = "OK scram." 
      default : break 
      } 
     userTapped = true 
     } 
    } 
} 

がある私はとmeを等しくすることができますかわからないんだけど、switchでそれを解決しようとしたか、私の解決策であっても良いものである場合。

答えて

2
class ViewController: UIViewController { 

    @IBOutlet weak var textBox: UILabel! 

    let strings = ["Hello, World!", "Hello, Human!", "OK scram."] 
    var tapCount = 0 

    @IBAction func tappedMe(_ sender: UIButton) { 
     textBox.text = strings[tapCount] 
     tapCount = (tapCount + 1) % strings.count 
    } 

} 
+0

これよりも簡単にすることはできません... – Jake

+1

理論的には、ボタンがInt.maxを押した後にクラッシュしますが、確かにやりにくいでしょう。文字列をインデックス化するときに、 '%'を実行する代わりに 'tapCount =(tapCount + 1)%strings.count'を実行することができます。 – vacawama

+0

素晴らしい提案!!!!! – efremidze

2

あなたは私がそれを正しく理解すれば、それはあなたの目標を達成するでしょう。このような何かを行うことができます:

import UIKit 

class ViewController: UIViewController { 
@IBOutlet weak var textBox: UILabel! 

// Integer to track number of times button has been tapped 
var tapCount = 0 

// Max total of text variations, for this case 2 (you have three different values, but always start with zero) 
let max = 2 

@IBAction func tappedMe(_ sender: UIButton) { 
    // Try different conditions for value of tapCount 
    switch tapCount { 
     case 0: 
      textBox.text = "Hello, World!" 
     case 1: 
      textBox.text = "Hello, Human!" 
     case 2: 
      textBox.text = "OK scram." 
     default : break 
    } 

    // If this is the max number of times you want to display changing text, reset tapCount to zero, otherwise increment tapCount. 
    if tapCount < max { 
     tapCount += 1 
    } else { 
     tapCount = 0 
    } 
} 


} 
+0

@vacawama - 素敵なキャッチ!ありがとうございました。私はもっ​​と注意を払うべきだと思う。私は先に進み、私の答えを編集しました – Pierce

+0

@vacawama - 大丈夫、コードとコメントが正確に目的の結果を反映するようになりました。好奇心の理由から、なぜtapCountと 'max'を整数として開始してはいけないのですか?私はいつもそんなに慣れてきたので、それは第二の性質になっています。ほとんどの場合、これをやめてください。 – Pierce

+0

はい。迅速な方法は、不要な型指定を避けることです。それはエラーではなく、ベストプラクティススタイルのものです。 Swiftはあなたが割り当てている値から 'tapCount'と' max'の型を 'Int'に推論できます。 – vacawama

関連する問題