シナリオスウィフト3:どのようにループ配列に対してループするために使用する
のは、私はこの配列で印刷データに私を可能にbutton
機能を持っているarray = ["a", "b", "c", "d"]
をしたとしましょう。私はforループを使って配列をループします。
最後の配列要素(index[3]
)が4回目のクリックで印刷された後、5回目のクリックで開始点(index[0]
)から印刷します。
ご協力いただきありがとうございます。
は、ボタンがタップされたときに
シナリオスウィフト3:どのようにループ配列に対してループするために使用する
のは、私はこの配列で印刷データに私を可能にbutton
機能を持っているarray = ["a", "b", "c", "d"]
をしたとしましょう。私はforループを使って配列をループします。
最後の配列要素(index[3]
)が4回目のクリックで印刷された後、5回目のクリックで開始点(index[0]
)から印刷します。
ご協力いただきありがとうございます。
は、ボタンがタップされたときに
このため、配列オブジェクトの現在の要素のインデックスを維持するだけで済みます。
var currentIndex = 0
@IBAction func buttonClick(_ sender: UIButton) {
print(array[currentIndex])
currentIndex += 1
if currentIndex == array.count {
currentIndex = 0
}
}
これはコメントでなければなりません。 –
@ VishalSonawane編集された答え。 –
はい..アップしました:) –
次のクリック数のVAR(0で初期化)を保持し、使用ありがとう:
let valToPrint = yourArray[clickCount % yourArray.count]
clickCount += 1
print("Current value = \(valToPrint)")
%(モジュロ)オペレータ必要とされる範囲を循環clickCount
。
ボタンのコードの下のライト
@IBAction func myButton(_ sender: UIButton) {
if sender.tag > array.count{
sender.tag = 0
}
print("array[\(sender.tag)] = \(array[sender.tag])")
sender.tag += 1
}
をクリックあなたはそれの技術的な喜びのために
let letters = ["a", "b", "c", "d"]
var index = 0
func printNext() {
print(letters[index])
index = (index + 1) % letters.count
}
ああもちろん、私はそれをあまりにも速くスキミングしました、あなたはインデックスを直接使用すると信じて! – dfri
を書くことができます:別の代替は、シーケンスを定義することです配列の要素を循環します。あなたは、配列が可変であるとする(var
)と、それは今までに空になった場合には
class Foo {
private let array: [String]
private lazy var cyclingSequenceOverArray:
UnfoldSequence<String, Int> = sequence(state: -1) {
(state: inout Int) -> String? in
guard !self.array.isEmpty else { return nil }
return self.array[(state = (state + 1) % self.array.count, state).1]
}
init(_ array: [String]) {
self.array = array
}
func printNext() {
if let next = cyclingSequenceOverArray.next() {
print(next)
}
}
}
let foo = Foo(["a", "b", "c", "d"])
foo.printNext() // a
foo.printNext() // b
foo.printNext() // c
foo.printNext() // d
foo.printNext() // a
foo.printNext() // b
:(上記の実装として)next()
メソッドの呼び出しの不変の配列を考えると
シーケンスはシーケンスを終了します。すなわち、配列が再充填されたとしても、その後のnext()
への呼び出しでは、まだnil
が返されます。
class Foo {
var array: [String]
private lazy var cyclingSequenceOverArray:
UnfoldSequence<String, Int> = sequence(state: -1) {
(state: inout Int) -> String in
guard !self.array.isEmpty else { return (state = -1, "Empty!").1 }
return self.array[(state = (state + 1) % self.array.count, state).1]
}
init(_ array: [String]) {
self.array = array
}
func printNext() {
if let next = cyclingSequenceOverArray.next() {
print(next)
}
}
}
使用例:
let foo = Foo(["a", "b", "c", "d"])
foo.printNext() // a
foo.printNext() // b
foo.printNext() // c
foo.array = []
foo.printNext() // Empty!
foo.printNext() // Empty!
foo.array = ["a", "b", "c", "d"]
foo.printNext() // a
foo.printNext() // b
foo.array[2] = "C"
foo.printNext() // C
foo.array = ["1", "2", "3"]
foo.printNext() // 1
無関係な質問タイトル –