使用Swift通过PrepareForSegue传递Struct

时间:2016-05-12 03:51:15

标签: swift struct segue

我是iPhone编码的新手,我正试图通过PrepareForSegue将结构传递给我的第二个VC。

在我的主视图控制器中,我有以下struct

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来保存传递的struct var passedAccountStruct:[PassedAccountStruct] = []

我得到的错误是 "无法转换类型的值' ViewController.AccountStruct'预期参数类型' PresentedViewController.PassedAccountStruct'"

4 个答案:

答案 0 :(得分:1)

您在PassedAccountStructViewController中复制了PresentedViewController。所以有两种不同的PassedAccountStruct。请保留一个。例如,您保留ViewController一个,您可以在其他视图控制器中通过ViewController.AccountStruct访问它。

答案 1 :(得分:1)

您的传递的帐号在您的第二个ViewController中应该是这样的:

var passedAccountStruct = [AccountStruct]()

答案 2 :(得分:0)

该消息非常自我解释

  

"无法转换类型' ViewController.AccountStruct'的值至   预期参数类型' PresentedViewController.PassedAccountStruct'"

passedAccountStruct的类型不是AccountStruct数组,请验证两个数据的类型。

答案 3 :(得分:0)

通过思考您的程序快速传递结构。 取决于你想要做什么。

解决问题的一种方法是将结构中的变量类型更改为“static”

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

然后,从项目中的任何文件中,您只需访问该数组:

AccountStruct.accountsFromStruct[index]

现在,可能有其他方法可以更好地适用于您的情况。

尝试查看Access Control