2016-07-19 7 views
2

私は、6つのテキストフィールドのエントリを取り出し、2つ目のビューコントローラの空の文字列配列にsegueを渡すswiftを使ってアプリケーションを実行しています。それ、どうやったら出来るの?テキストフィールドを文字列配列に連結する

これは私のコードですが、基本ですが、私はどのように情報を送ることができるのか分かりません。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    let destination = segue.destinationViewController as! secondView 

    if segue.identifier == segueID { 

     destination.stringArray = ? 

    } 

} 

私の第2のビューコントローラ上のアレイはこれです:

var stringArray = [String]() 

答えて

2

最短方法:後者はオプション `STRING`エントリを許可しないdestionationで` stringArray`として機能しないこと

destination.stringArray = view.subviews.flatMap { ($0 as? UITextField)?.text } 
+0

質問者は、ビュー内のすべてのテキストフィールドを使用するとは必ずしも言いませんでした。これは、ビュー階層の1レベル以上のテキストフィールド(つまり、サブビューに含まれている)をも考慮していません。 – Connor

+0

階層のレベルがより高い場合は、もちろん書き直す必要があります。それは非常に良い点です:) 私の答えは、すべてのテキストフィールドが1つのルートビューのサブビューであるときに、短い方法でそれを達成する方法を示しています。 – fiks

+0

実際これは魅力のように働いていました。申し訳ありませんが、私の質問ではあまり具体的ではありませんでした。すべてのテキストフィールドを使用する必要があります。そうでない場合は、警告が表示されます。これは本当にありがとうございます。シンプルでストレートなポイント。 :) – art3mis

1

は、彼らそれぞれ独自IBOutlet(テキストフィールド(つまり、テキストフィールドの配列)IBOutletCollectionであなたの6つのテキストフィールドにいるかです)?

destination.stringArray = myTextFieldCollection.flatMap { $0.text } 

それとも、彼らは配列にいないのであれば:いずれかの方法では、あなたの質問は、彼らがIBOutletCollectionにいる場合は、次のように行うことができる配列、でそのテキスト値のすべてを置くことにダウンしています:

destination.stringArray = [myTextField1, myTextField2, ..., 
    myTextField6].flatMap { $0.text } 

UITextField.textはオプションString?あるので、私はこれらの中flatMapを使用していますので、彼らは安全にしているflatMapStringにアンラップする必要があります。

+0

注意。 – dfri

+0

良いキャッチ、固定。 – Connor