2016-05-12 5 views
0

iPhoneのコーディングが新しく、PrepareForSegueを通じて2番目のVCに構造体を渡そうとしています。SwiftでPrepareForSegueを介してStructを渡します。

Iは構造体

struct AccountStruct { 
     var account: String 
     var balance: Double 
     var objectId: String 
} 

var accountsFromStruct : [AccountStruct] = [] 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     accountsFromStruct.append(AccountStruct(account: "Checking", balance: 451.455, objectId: "12354785")) 

     accountsFromStruct.append(AccountStruct(account: "Savings", balance: 871.455, objectId: "123dfdf5")) 


     let SecondVC = segue.destinationViewController as! PresentedViewController 
     SecondVC.passedAccountStruct = accountsFromStruct 
} 

下に[マイ第VCにIが経過構造体 するvar passedAccountStructを保持するように設定VARにコードの下に持っている私のメインビューコントローラで

:[PassedAccountStruct] = []

私のエラーは "'ViewController.AccountStruct'の値を 'PresentedViewController.PassedAccountStruct'の予想される型に変換できません"

+0

に探してみてください。 [PassedAccountStruct]を[AccountStruct]に変更します。 – Gruntcakes

+0

@SausageMachineが述べたように、2番目のView Controllerの型は、[AccountStruct]でなく[PassedAccountStruct]でなければなりません。また、= []を持つ空の配列に初期化する意味がありません。これは、オプションのvarに設定する必要があります。これは、segueに設定するまではゼロになります。これはvar passedAccountStruct:[AccountStruct]のようになりますか? – user3847320

答えて

1

PresentedViewControllerのです。したがって、2つの異なるPassedAccountStructがあります。 1つを保管してください。たとえば、ViewControllerを1つにしておけば、他のビューコントローラでViewController.AccountStructにアクセスできます。

あなた passedAccountStructはあなたの第二 ViewControllerでこのようにする必要があり
+0

これを "var passedAccountStruct:[ViewController.AccountStruct]"に変更しますか? "データを渡しましょう。 –

1

var passedAccountStruct = [AccountStruct]() 
+0

私が[AccountStruct]()に変更したときに、「宣言されていない型の使用」というAccountStructのエラーが発生しました。 –

0

メッセージ本当に自己「型の値を変換できません

を説明図である 'ViewController.AccountStruct' 期待 に引数型 'PresentedViewController.PassedAccountStruct' "

passedAccountStructの型がAccountStruct配列ではないため、両方のデータの型を確認してください。

0

ストラクチャは、あなたのプログラムを素早く受け継いでいます。 あなたがそれにしたいことに応じて。

一つの方法に問題を解決することであるあなただけの配列にアクセスすることができ、プロジェクト内の任意のファイルから、次に

struct AccountStruct { 
     static var account: String 
     static var balance: Double 
     static var objectId: String 
     static var accountsFromStruct : [AccountStruct] = [] 
} 

に「静」のstruct内の変数のタイプを変更することです:

AccountStruct.accountsFromStruct[index] 

ここでは、あなたのケースでより良い練習になる他の方法があるかもしれません。

あなたの構造体の型がAccountStructのないタイプPassedAccountStructであるAccess Control

関連する問題