2016-05-12 2 views
0

Я новичок в кодировании iPhone, и я пытаюсь передать структуру на свой второй VC через PrepareForSegue.Pass Struct через 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 у меня есть ниже кода для установки вара держать передаются STRUCT уага passedAccountStruct: [PassedAccountStruct] = []

Моя ошибка, которую я получаю, равна «Невозможно преобразовать значение типа« ViewController.AccountStruct »в ожидаемый тип аргумента« PresentedViewController.PassedAccountStruct »»

+0

Вашей структуры имеет типа AccountStruct не тип PassedAccountStruct. Измените [PassedAccountStruct] на [AccountStruct]. – Gruntcakes

+0

Как сказал @SausageMachine, тип вашего второго контроллера просмотра должен быть [AccountStruct] не [PassedAccountStruct], также нет смысла инициализировать его пустым массивом с = []. Это должно быть установлено как необязательный параметр var, который будет равен нулю, пока вы не установите его в режиме segue. Это будет выглядеть как var passAccountStruct: [AccountStruct]? – user3847320

ответ

1

Вы скопировали PassedAccountStruct как в ViewController, так и в PresentedViewController. Так что есть два разных PassedAccountStruct. Пожалуйста, сохраните его. Например, вы сохранили ViewController, вы можете получить к нему доступ ViewController.AccountStruct в других контроллерах.

+0

Удивительно изменить его на «var passAccountStruct: [ViewController.AccountStruct]?» позвольте мне передать данные. –

1

Ваш passedAccountStruct Должно быть, как это в вашем втором ViewController:

var passedAccountStruct = [AccountStruct]() 
+0

, когда я перешел на [AccountStruct]() Я получил ошибку «использование необъявленного типа« AccountStruct » –

0

сообщение действительно сам объяснительное

«Невозможно преобразовать значение типа„ViewController.AccountStruct“в ожидается аргумент типа «PresentedViewController.PassedAccountStruct» «

Тип пройденного объектаAccountStruct не является массивом 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

Смежные вопросы