有条件地绑定到现有属性

时间:2017-01-03 02:50:17

标签: swift swift3 guard-statement conditional-binding

我正在寻找改善这种代码模式的方法:

struct Struct {
    let i: Int

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

很高兴删除unwrappedI临时变量。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

我会说:

struct Struct {
    let i: Int

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

我认为这可以捕捉你最早退出的愿望并避免你试图避免的if/else,没有中间变量。要解开i,只需解开它!不需要if letguard let或任何那些花哨的东西。

(另一方面,我要问:如果将nil传递给初始化程序被视为失败,为什么要首先接受一个Optional?)

答案 1 :(得分:1)

嗯,我确信过度思考......我需要睡觉。

struct Struct {
    let i: Int

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