ここでの主な問題は、配列がすべてのループ反復で新しく作成され、ラベルがすべてのループ反復で設定されていることです。つまり、配列にはその反復で作成された要素のみが含まれ、その後で新しい配列にリセットされ、新しい要素が追加されます。配列は開始時に一度初期化され、ループ内で繰り返し要素が追加され、最後に一度ラベルに挿入される必要があります。
@IBAction func generateBtn(sender: UIButton) {
guard let startText = strtNum.text, let start = UInt32(startText),
let endText = endNum.text, let end = UInt32(endText),
let ttlText = amtNums.text, let ttlNums = UInt32(ttlText) else {
//one of these is nil, handle it gracefully here
return
}
let randomGenerator = RandomNum()
var h = [String]()
h.reserveCapacity(ttlNums)
for _ in 0..<ttlNums {
let randomNum = randomGenerator.rndNumGen(start, end: end)
h.append(String(RandomNum))
}
let display = h.joinWithSeparator(", ")
winningNums.text = display
print(display)
}
私はスウィフトのベストプラクティスや規則に沿って、このコードを持って他のいくつかの変更を加えました:
- はアンラップを強制しないでください。
if let
またはguard let
バインドを使用して、ゼロ値を安全に処理します。
- 変数に意味のある名前を付けます。特定の場合を除いて、一文字の名前は避けてください。
- 関数/メソッド名の横にスペースを入れないでください。
- 既知の範囲を反復するためにwhileループを使用しないでください。代わりに、
for in
ループを使用してください。
- t3xtspkには入力していませんが、それはあなたのおかげで十代の若者が書いたように見えます。オートコンプリートであなたの言葉が終わるので、とにかくタイピングすることはほとんどありません。簡単で読みやすいものにする。
私はあなたがいくつかの変更を自分で作ることをお勧め:
- が
generateBtn
の名前を変更します。機能/方法DOは、動作です。それらは動詞、または動詞句で命名されるべきです。おそらくdisplayRandomArray
のようなものを試してみてください。
- ランダム配列生成を独自のメソッドにリファクタリングします。
- 名前の変更
RandomNum
。見た目では、数字ではありません。ランダム番号ジェネレーターです。おそらく試してみてくださいRandomNumberGenerator
- 名前の変更
h
。
- こと
.text
がnilである、またはそれはUInt32型で
(したがって失敗し
nil
を返すためにUInt32
初期化子を引き起こす)ではない文字列が含まれている場合、何が起こるときに何が起こるかに対処するためのコードを追加します 'あなたはいつも新しい空変数 'h'を作成しています。これは意図されていますか? – vadian