2017-11-27 15 views
0

私の目標は、rowClosureを他のView Controllerに渡すことですが、ここではまだ立ち往生しています。私はそれを解決するために何をすべきですか?UIPickerViewの行インデックスをクロージャで渡す

ViewController1

var rowClosure : (Int) -> (Int) = { x in return x} 

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 

    self.rowClosure(row) 

    } 

ViewController2

let vc1 = ViewController1() 
    var row: Int! 
row = vc1.rowClosure 

しかし、あなたが閉鎖を使用する場合は、コードは次のようなものになるはずです

+0

あなたは 'ViewController1の新しいインスタンスを作成しています'、あなたのクロージャーにも値がない、あなたのコードがどのように働くかを伝えることはできません。 – Tj3n

答えて

0

を働いていない:

VC1を

var rowClosure : ((Int) -> Void)? 

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 

    self.rowClosure?(row) 

    } 

はその後VC2に、あなたはVC1への参照を取得し、あなたがVC1からクロージャを呼び出すときVC2で実行を取得するために必要なコードと閉鎖を設定します。

vc1.rowClosure = { (vc1Row) in 
    //do something with row, for example 
    vc2.row = vc1Row 
} 
関連する問題