2016-05-12 139 views
0

我是新來的iPhone編碼,我想通過PrepareForSegue將結構傳遞給我的第二個VC。通過PrepareForSegue傳遞結構Swift

以我主視圖控制器我有以下結構

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我有下面的代碼來設置無功以保持傳遞結構 VAR passedAccountStruct:[PassedAccountStruct] = []

我得到的錯誤是 「無法將類型'ViewController.AccountStruct'的值轉換爲期望的參數類型'PresentsViewController.PassedAccountStruct'」

+0

你的結構是類型AccountStruct的類型不是PassedAccountStruct的。將[PassedAccountStruct]更改爲[AccountStruct]。 – Gruntcakes

+0

正如@SausageMachine所說,你的第二個視圖控制器中的類型應該是[AccountStruct]而不是[PassedAccountStruct],並且用= []將它初始化爲空數組沒有任何意義。這應該被設置爲一個可選的var,在你將其設置爲segue之前它將爲零。這看起來像var passedAccountStruct:[AccountStruct]? – user3847320

回答

1

複製在ViewControllerPresentedViewController中的。所以有兩種不同的PassedAccountStruct。請保留一個。例如,您保留了ViewController之一,您可以在其他視圖控制器中通過ViewController.AccountStruct訪問它。

+0

真棒改變它爲「var passedAccountStruct:[ViewController.AccountStruct]?」讓我傳入數據。 –

1

passedAccountStruct應該是這樣在你的第二個ViewController

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] = [] 
} 

然後,從該項目中的任何文件,你可以只訪問數組:

AccountStruct.accountsFromStruct[index] 

現在,可能有其他方法,將會更好地爲您的情況實踐。

嘗試尋找到Access Control