我现在的输出是由这段代码产生的,但是我的问题是,如果让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 ?? "")
答案 0 :(得分:2)
struct
是值类型,因此在
if var accVM = accountVM {
accVM.updateAccountName(name: "Update Name")
}
accVm
是accountVM!
的(可变)副本。因此
您可以修改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")
}