Условно привязка к существующей недвижимости

Я ищу способ улучшить этот шаблон кода:

struct Struct {
    let i: Int

    init?(i: Int?) {
        guard let unwrappedI = i else { return nil }
        self.i = unwrappedI
    }
}

Было бы неплохо удалить unwrappedI временная переменная Какие-либо предложения?

2 ответа

Я бы сказал:

struct Struct {
    let i: Int

    init?(i: Int?) {
        if i == nil {return nil}
        self.i = i!
    }
}

Я думаю, что это отражает ваше первоначальное желание уйти пораньше и избегает if/else вы пытались избежать, без промежуточной переменной. Развернуть iПросто разверните это! Нет необходимости if let или же guard let или что-нибудь из этого необычного материала.

(С другой стороны, я должен спросить: если прохождение nil чтобы инициализатор считался неудачным, зачем предлагать принять опционально в первую очередь?)

Ну, я был уверен, что продумал это... Мне нужно спать.

struct Struct {
    let i: Int

    init?(i: Int?) {
        if let i = i { self.i = i }
        else { return nil }
    }
}
Другие вопросы по тегам