如果让Swift快速绑定struct怎么执行

时间:2018-10-23 05:02:22

标签: swift swift4.2

我现在的输出是由这段代码产生的,但是我的问题是,如果让swift绑定到struct上,我应该如何执行。

是否无法快速绑定struct的let绑定。如果是,那我们该怎么做

struct Account {
    var name: String
    init(name: String) {
        self.name = name
    }
}

struct AccountViewModel {
    private var account: Account

    var accountName: String {
        return "Account Name >>>>> " + self.account.name
    }

    init(acc: Account) {
        self.account = acc
    }

    mutating func updateAccountName(name: String) {
        self.account.name = name
    }
}

let acc = Account.init(name: "First Account")
print("Account Name >>>>>", acc.name)

var accountVM: AccountViewModel?
accountVM = AccountViewModel.init(acc: acc)

if var accVM = accountVM {
    accVM.updateAccountName(name: "Update Name")
}

print(accountVM?.accountName ?? "")

2 个答案:

答案 0 :(得分:2)

struct值类型,因此在

if var accVM = accountVM {
    accVM.updateAccountName(name: "Update Name")
}

accVmaccountVM!的(可变)副本。因此 您可以修改accVM,但不会更改accountVM。如果您打算 更新accountVM,然后可以从突变的accVM中分配它:

if var accVM = accountVM {
    accVM.updateAccountName(name: "Update Name")
    accountVM = accVM
}

或者,使用可选链接而不是可选绑定:

accountVM?.updateAccountName(name: "Update Name")

答案 1 :(得分:1)

当然,Swift为我们提供了很多语法糖,并且可选绑定是展开可选对象的推荐方法。但是我认为,以传统的“守旧派”方式将变量与nil进行比较是正常情况。

因此,您可以替换

if var accVM = accountVM { 
    ccVM.updateAccountName(name: "Update Name") 
}

通过

if accountVM != nil { 
    accountVM!.updateAccountName(name: "Update Name") 
}