Как выполнить если позволить связывание со структурой в swift - PullRequest
0 голосов
/ 23 октября 2018

Я сейчас выводю с помощью этого куска кода, но моя проблема в том, как я могу выполнить, если let привязка к struct в swift.

Это, если let привязка невозможна со struct в swift.если да то как мы можем это сделать

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 голосов
/ 23 октября 2018

Конечно, Swift дает нам много синтаксического сахара, и необязательное связывание является рекомендуемым способом для развертывания необязательных файлов.Но, на мой взгляд, это нормальная ситуация, когда мы сравниваем переменную с nil традиционным способом «старой школы».

Итак, вы можете заменить

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

на

if accountVM != nil { 
    accountVM!.updateAccountName(name: "Update Name") 
}
0 голосов
/ 23 октября 2018

struct s являются типами значений, , поэтому в

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")
...