2017-10-24 9 views
0

以下に示すようにI、クラスがある:Swift 4で配列内のクラス項目のインデックスを取得する方法は?

struct Cur: Decodable { 
    let id: String 
    let name: String 
    let symbol: String 
    let switchVal:Bool 
} 

このクラスは、配列を移入し、アレイのUITableViewに表示されています。どのスイッチボタン(switchVal)がトグルされているかを検出する方法。したがって、関連する要素の "id"を取得する方法。

UISwitchButtonは、このようなプロトタイプのセル内にトグルされたとき、私は検出しています:

@IBAction func switchBtn(_ sender: UISwitch) { 
    if sender.isOn { 

    } 
} 
+0

ないに関連あなたの質問はあなたのプロパティで暗黙のうちにラップされていないオプションを使用しないでください –

+1

switchVal定数を定義するbtwは意味をなしません –

+1

そしてisOnはオプションではないBoolです。 '== true'を使うことは冗長です。 isOnでないかどうかをチェックするには、 'if!sender.isOn'を使用してください。 –

答えて

2

あなたは次のようにあなたの配列要素のインデックスを見つけるために、index(where:)メソッドを使用することができます。

struct Cur: Decodable { 
    let id: String 
    let name: String 
    let symbol: String 
    let switchVal: Bool 
} 

let cur1 = Cur(id: "a", name: "john", symbol: "j", switchVal: false) 
let cur2 = Cur(id: "b", name: "steve", symbol: "s", switchVal: true) 
let cur3 = Cur(id: "c", name: "Carl", symbol: "c", switchVal: false) 

let list = [cur1, cur2, cur3] 

if let index = list.index(where: {$0.switchVal}) { 
    print(list[index]) // Cur(id: "b", name: "steve", symbol: "s", switchVal: true)\n" 
    print(list[index].id) // "b\n" 
} 
+0

こんにちは、私はあなたのコードが完璧に動作すると確信しており、ありがとうございます。しかし、私はエラー "致命的なエラー:オプション値をアンラッピングしている間に予期せずnilが見つかりました"を取得しています。私はこれが私の力の包み込みと関係していると確信しています。それらの選択肢を見つけなければならない。ありがとうございました! – sc13

関連する問題